我在这个问题上看到的其他帖子说要确保加密字段是 bytea 类型,我的已经是。所以,我不确定我在这里做错了什么。请原谅愚蠢的密码,这只是测试概念证明。基本上,我加密“电子邮件”字段,然后检索并解密它,但值返回为 '\x66616b65406578616d706c652e636f6d'。我尝试向返回值添加 ::text 强制转换,但它没有改变结果。
psql (9.6.8)
CREATE EXTENSION IF NOT EXISTS pgcrypto;
create table IF NOT EXISTS test1
(
username varchar(32) PRIMARY KEY,
passhash varchar(255),
email bytea
);
insert into test1 values (
'amazar',
crypt('fakepass1', gen_salt('bf')),
pgp_sym_encrypt_bytea('fake@example.com', 'cryptopass123')
);
select
username,
crypt('fakepass1', passhash)=passhash as match,
pgp_sym_decrypt_bytea(email, 'cryptopass123') as email
from test1 where username='amazar';
-- 这是返回的值,而不是原始电子邮件
amazar | t | \x66616b65406578616d706c652e636f6d