-- add extension
CREATE EXTENSION pgcrypto;
-- sample DDL
CREATE TABLE test_encrypt(
value TEXT
);
INSERT INTO test_encrypt VALUES ('testvalue');
-- encrypt value
WITH encrypted_data AS (
SELECT crypt('PasswordToEncrypt0',gen_salt('md5')) as hashed_value
)
UPDATE test_encrypt SET value = (SELECT hashed_value FROM encrypted_data);
验证密码:
SELECT (value = crypt('PasswordToEncrypt0', value)) AS match FROM test_encrypt;
SELECT pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') FROM users WHERE pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') ILIKE 'johny%'; -- querying for agents whose name start with johny
CREATE TABLE agents (
id serial primary key,
name bytea not null
);
因此,在查询时,您不需要每次都强制转换,您可以这样做
SELECT pgp_sym_decrypt(name, 'longsecretencryptionkey') FROM users WHERE pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') ILIKE 'johny%'; -- querying for agents whose name start with johny
3条答案
按热度按时间lnlaulya1#
是的,Postgres**
pgcrypto
模块确实支持AES
。所有详细信息和示例都可以在here**中找到。关于示例用法:验证密码:
退货:
r3i60tvu2#
这就是使用
pgcrypto
模块加密列数据的方式。第一个
是您的加密密钥。您可以从此处生成加密密钥encryption key generator并选择您要选择的位。建议选择最小256位。
请记住将加密密钥保存在安全的地方。如果丢失了加密密钥,您将无法再解密它。了解这一点非常重要。
这就是查询它们的方式
你可以看看这篇帮助我的博客文章https://blog.andreiavram.ro/encrypt-postgresql-column/
**注意:**您可以对数据行使用
bytea
资料类型,而不是保留varchar
中的name数据行。因此,数据表会变成因此,在查询时,您不需要每次都强制转换,您可以这样做
tct7dpnv3#
编辑队列已满,
在这里写一些关于地穴描述:
一. crypt()
密码散列函数
https://www.postgresql.org/docs/current/pgcrypto.html#id-1.11.7.35.7
函数
crypt()
和gen_salt()
专门设计用于散列密码。crypt()执行哈希运算,gen_salt()为其准备算法参数。
计算密码的
crypt(3)-style
散列。存储新密码时,需要使用gen_salt()生成新的salt值。要检查密码,请将存储的散列值作为盐传递,并测试结果是否与存储的值匹配。"男人3号墓穴"
https://manpages.ubuntu.com/manpages/jammy/en/man3/crypt.3.html
crypt
、crypt_r、crypt_rn和crypt_ra函数不可逆地“散列”短语,以便使用加密“散列方法”存储在系统密码数据库(shadow
(5))中。二. pgp_sym_encrypt
PGP加密函数
https://www.postgresql.org/docs/current/pgcrypto.html#id-1.11.7.35.8
这里的函数实现了OpenPGP(RFC 4880)标准的加密部分。支持对称密钥和公钥加密。
使用对称PGP密钥psw加密数据。
解密对称密钥加密的PGP消息。