pgp_sym_decrypt_bytea не возвращает ожидаемое значение, что я делаю не так?
Другие сообщения, которые я видел по этой проблеме, говорят, чтобы убедиться, что зашифрованное поле имеет тип bytea, который уже есть у меня. Так что я не совсем уверен, что я делаю здесь не так. Прошу прощения за глупые пароли, это всего лишь тестовое подтверждение концепции. По сути, я шифрую поле "электронная почта", а затем извлекаю и дешифрую его, но значение возвращается как "\x66616b65406578616d706c652e636f6d". Я попытался добавить преобразование::text к возвращенному значению, но это не изменило результат.
PSL (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 ответ
Неважно, я понял это. Просто нужно было использовать pgp_sym_decrypt в операторе выбора вместо pgp_sym_decrypt_bytea.