调用本机函数时参数计数不正确 'aes_decrypt'

Incorrect parameter count in the call to native function 'aes_decrypt'

我正在尝试将我们的加密从代码转移到数据库以加快速度。当我尝试使用此 select 语句解密信息时,我收到不正确的参数计数错误。

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

我查看了文档,这应该可行。谁能告诉我我做错了什么??

编辑 我试过重新启动 MySQL 服务器无济于事。服务器版本为 5.6.22

从你提供的例子来看似乎没问题。你能看看先投吗?

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

请检查此 link 它有一些关于您面临的问题的重要资源...

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

编辑 - 实际修复

如果未提供 IV,使用 AES_ENCRYPT() 或 AES_DECRYPT() 并将 block_encryption_mode 设置为 ECB 以外的块密码将产生错误:

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

查询正常,0 行受影响(0.00 秒)

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

错误 1582 (42000):调用本机函数时参数计数不正确 'aes_encrypt' mysql> SELECT HEX(AES_ENCRYPT('test', 'key', RANDOM_BYTES(16))); +------------------------------------------------ --+ |十六进制(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));

+------------------------------------+ |十六进制(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 秒)