pgp_sym_decrypt_bytea没有返回预期值,我做错了什么?

时间:2018-05-04 17:30:29

标签: postgresql pgcrypto

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

1 个答案:

答案 0 :(得分:0)

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