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