pgp_sym_decrypt_bytea не возвращает ожидаемое значение, что я делаю не так? - PullRequest
0 голосов
/ 04 мая 2018

В других сообщениях, которые я видел по этой проблеме, сказано, чтобы убедиться, что зашифрованное поле имеет тип 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 голосов
/ 04 мая 2018

Неважно, я понял это. Просто нужно было использовать pgp_sym_decrypt в операторе выбора вместо pgp_sym_decrypt_bytea.

...