2014-10-30 6 views
1

Я хотел бы зашифровать столбец area_code в моей базе данных postgreSQL с помощью шифрования aes 256. Вот что происходит .. Я могу зашифровать его легко, но я не могу его расшифровать.pgp_sym_encrypt и расшифровать весь столбец в postgresql

Вот запрос шифрования, который работает отлично:

 update mytable t1 set area_code = t2.area_code from (select pgp_sym_encrypt(area_code,'Password', 'compress-algo=1, cipher-algo=aes256') as area_code,area_name from mytable) t2 where t1.area_name = t2.area_name; 

Однако не кажется запрос дешифрования работать, если я дам что-то вроде

  update mytable t1 set area_code = t2.area_code from (select pgp_sym_decrypt(area_code,'Password') as area_code,area_name from mytable) t2 where t1.area_name = t2.area_name; 

или даже при попытке просмотра расшифрованных area_code

select pgp_sym_decrypt((select area_code from ci), 'Password') ; 

Единственное, что работает, это когда я использую одну запись и канал в зашифрованном тексте непосредственно в качестве ввода.

select pgp_sym_decrypt('aes.encrypted.string.given.as.input', 'Password') ; 

Может кто-нибудь дать мне несколько материалов о том, как расшифровать весь столбец в таблице!

Спасибо :)

+0

Здесь ошибка: ERROR: функция pgp_sym_decrypt (характер варьирования, неизвестен) не существует ЛИНИЯ 3: от (выберите pgp_sym_decrypt (код_города, «Пароль») в области _... ^ СОВЕТ: Ни одна функция не совпадает с заданные имена и типы аргументов. Возможно, вам придется добавить явные типы приведения. ********** Ошибка ********** – Fireworks2188

ответ

2

Вы должны хранить зашифрованные данные в столбец BYTEA, а не текст столбца. Вы можете быть в состоянии бросить его BYTEA из текста:

pgp_sym_decrypt(area_code::bytea,'Password') 

Почему вы не обновлять таблицу непосредственно, а не делать вырожденный автообъединение на обновление?