2015-01-06 2 views
1

Я пытаюсь переместить наше шифрование из кода в базу данных, чтобы ускорить процесс. Когда я пытаюсь расшифровать информацию с помощью этого оператора select, я получаю неправильную ошибку счетчика параметров.Неверный счетчик параметров в вызове функции native 'aes_decrypt'

SELECT AES_DECRYPT(u.strFirstName,'usa2010') FROM EncryptingTest.tblUser u; 

Я просмотрел документацию, и это должно сработать. Может кто-нибудь сказать мне, что я делаю неправильно?

EDIT Я попытался перезагрузить сервер MySQL безрезультатно. Версия сервера - 5.6.22

+0

Какая именно ошибка вы получаете? [Документация] (http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_aes-decrypt) подразумевает, что это должно сработать. – tadman

+0

Код ошибки: 1582. Неправильный счетчик параметров в вызове на нативную функцию 'aes_decrypt' - это ошибка, которую я получаю – Bryan

+0

Вы прочитали в режиме Block Cypher в приведенной ссылке? – Codexer

ответ

1

Из приведенного вами примера это выглядит нормально. Можете ли вы увидеть, как это сделать?

SELECT CAST(AES_DECRYPT(u.strFirstName,'usa2010') AS CHAR(50)) FROM EncryptingTest.tblUser u; 

Пожалуйста, проверьте эту ссылку у него есть некоторые большие ресурсы по этому вопросу ваш облицовочного ...

http://mysqlblog.fivefarmers.com/2014/03/27/mysql-5-6-17-now-with-better-encryption/

EDIT - Действительное затруднительное

Использование AES_ENCRYPT() или AES_DECRYPT() с block_encryption_mode, установленным на блочный шифр, отличный от ECB, приведет к ошибке, если IV не предоставлен:

mysql> SET @@session.block_encryption_mode = 'aes-256-cbc'; 

Query OK, 0 затронутых строк (0,00 сек)

mysql> SELECT HEX(AES_ENCRYPT('test', 'key')); 

ERROR 1582 (42000): Неверный подсчет параметров в вызове собственной функции 'AES_ENCRYPT' MySQL> SELECT HEX (AES_ENCRYPT ("тест ',' key ', RANDOM_BYTES (16))); + ------------------------------------------------ --- + | HEX (AES_ENCRYPT ('test', 'key', RANDOM_BYTES (16))) | + ------------------------------------------------ --- + | 2EFBA8708925C1DF8B661E57938FAE5E | + ------------------------------------------------ --- + 1 строка в наборе (0,00 сек) Обратите внимание, что IV не хранится в результирующем зашифрованном виде - это артефакт, который вам придется отслеживать отдельно, чтобы получить дешифрованные значения обратно:

mysql> SET @iv = RANDOM_BYTES(16); 

запроса ОК, 0 затронутых строк (0,01 сек)

mysql> SELECT HEX(AES_ENCRYPT('test', 'key', @iv)); 

+ ---------------------------- ---------- + | HEX (AES_ENCRYPT ('test', 'key', @iv)) | + -------------------------------------- + | 650CE9E699ECA922E09E80CEBE51BFC7 | + -------------------------------------- + 1 ряд в комплекте (0,00 сек)

mysql> SELECT AES_DECRYPT(UNHEX('650CE9E699ECA922E09E80CEBE51BFC7'), 'key', @iv); 

+ ------------------------------------------ -------------------------- +

AES_DECRYPT(UNHEX('650CE9E699ECA922E09E80CEBE51BFC7'), 'key', @iv) | 

+ --------------- -------------------------------------------------- --- + | тест | + ------------------------------------------------ -------------------- + 1 ряд в комплекте (0.00 сек)

+0

Я получаю такое же сообщение об ошибке .... Я также попытался остановить и перезапустить сервер MySQL – Bryan

+0

См. Edit ... – Codexer

+0

Рад, что это помогло, но это не дает понять читателю (случайному), как проблема была фактически решена. Это был актер? –

Смежные вопросы