0

我在这个问题上看到的其他帖子说要确保加密字段是 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
4

1 回答 1

0

没关系,我想通了。只需要在 select 语句中使用 pgp_sym_decrypt 而不是 pgp_sym_decrypt_bytea。

于 2018-05-04T19:40:45.037 回答