调用本机函数时参数计数不正确 '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 秒)
我正在尝试将我们的加密从代码转移到数据库以加快速度。当我尝试使用此 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 秒)