Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Модуль pgcrypto предоставляет два типа алгоритмов шифрования данных: одностороннее и двустороннее шифрование, что позволяет осуществлять шифрование данных на уровне базы данных для обеспечения безопасного использования данных.
Одностороннее шифрование является необратимым; исходный текст невозможно восстановить из зашифрованных данных. Подходит для проверки подлинности данных, например, для аутентификации паролей при входе в систему. Распространённые алгоритмы одностороннего шифрования включают MD5, SHA, HMAC и др.
Двустороннее шифрование является обратимым; исходный текст может быть расшифрован из зашифрованных данных с использованием ключа. Подходит для сценариев безопасной передачи данных, таких как электронные платежи и цифровые подписи. Распространённые алгоритмы двустороннего шифрования включают AES, DES, RSA, ECC, SM4 и др.
Стандартные хеш-функции
digest() генерирует двоичное хеш-значение для данных с использованием различных алгоритмов. Такие алгоритмы дают одинаковый результат при шифровании идентичных данных.# Syntax
digest(data text, type text) returns bytea
digest(data bytea, type text) returns bytea
# 'type' specifies the algorithm to use. Standard options are md5, sha1, sha224, sha256, sha384, and sha512.
# Example usage
INSERT INTO users(username, password)
VALUES ('tony', encode(digest('123456','md5'), 'hex'));
INSERT INTO users(username, password)
VALUES ('anne', encode(digest('123456','md5'), 'hex'));
SELECT * FROM users;
id|username|password |
--|--------|--------------------------------|
1|tony |e10adc3949ba59abbe56e057f20f883e|
2|anne |e10adc3949ba59abbe56e057f20f883e|
# During comparison, use the encode() function to convert to hexadecimal
SELECT id FROM users
WHERE username = 'tony' AND password = encode(digest('123456','md5'), 'hex');
id|
--|
1|
hmac() генерирует двоичное хеш-значение для данных с использованием секретного ключа (psw) с помощью различных алгоритмов. Аналогично digest(), но хеш можно воспроизвести только при использовании того же ключа.# Syntax
hmac(data text, psw text, type text) returns bytea
hmac(data bytea, psw text, type text) returns bytea
# 'type' specifies the algorithm to use. Standard options are md5, sha1, sha224, sha256, sha384, and sha512.
Функции шифрования PGP
Функции шифрования PGP реализуют возможности шифрования, определённые в стандарте OpenPGP (RFC4880), включая симметричное шифрование (шифрование закрытым ключом) и асимметричное шифрование (шифрование открытым ключом).
# Encryption
pgp_sym_encrypt(data text, psw text [, options text ]) returns bytea
pgp_sym_encrypt_bytea(data bytea, psw text [, options text ]) returns bytea
# Decryption
pgp_sym_decrypt(msg bytea, psw text [, options text ]) returns text
pgp_sym_decrypt_bytea(msg bytea, psw text [, options text ]) returns bytea
# Example usage
select pgp_sym_encrypt('abc','key_value');
pgp_sym_encrypt
----------------------------------------------------------------------------------------------------------------------------------------------
\xc30d04070302f93fbd59b40bf7fd71d2340175c19d234d275f5b8ae668fecbbdfd80f0e94185f07dee15cb6d2b0dfbfdf08c98648e07da8f3d8902bb3dd349fdb36860a1ff
(1 row)
select pgp_sym_decrypt(pgp_sym_encrypt('abc','key_value'),'key_value');
pgp_sym_decrypt
-----------------
abc
(1 row)
# Common options:
# cipher-algo: encryption algorithm to use; possible values are bf, aes128 (default), aes192, aes256
# compress-algo: compression algorithm; available only if PostgreSQL was compiled with zlib support. Possible values: 0 (no compression, default), 1 (ZIP), 2 (ZLIB, which includes metadata and CRC)
Функции шифрования SM4
SM4 — это симметричный алгоритм шифрования, относящийся к категории двустороннего шифрования. Это коммерческий криптографический стандарт, опубликованный Государственным управлением китайской криптографии. SM4 использует блок размером 128 бит и длину ключа 128 бит, обеспечивая эффективное шифрование и дешифрование за счёт множества итераций. Широко применяется в мобильной связи, IoT, финансовой сфере и других областях.
# Encryption
encrypt(data text, psw text [, options text ]) returns bytea;
# Decryption
decrypt(msg bytea, psw text [, options text ]) returns bytea;
# Example usage
create table t1 (c1 bytea);
insert into t1 select encrypt('123456', '1462846455', 'sm4');
select * from t1;
c1
------------------------------------
\xaf8aac27b4721d733852c18e9a6dd126
(1 row)
select convert_from(public.decrypt(c1, '1462846455', 'sm4'),'utf-8') from t1;
convert_from
--------------
123456
(1 row)
# Common option:
# cipher-algo: the encryption algorithm used is sm4