【问题标题】:pgp_sym_decrypt_bytea isn't returning expected value, what am I doing wrong?pgp_sym_decrypt_bytea 没有返回预期值,我做错了什么?
【发布时间】:2018-05-04 17:30:28
【问题描述】:

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

【问题讨论】:

    标签: postgresql pgcrypto


    【解决方案1】:

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

    【讨论】:

    • 正确。 _bytea 的存在与否告诉您明文的类型是什么。密文必须是 bytea,但明文可以是任何一种类型,您必须自己跟踪。
    猜你喜欢
    • 2021-07-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多