Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по 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