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

时间:2015-01-06 17:49:14

标签: mysql vb.net encryption

我正在尝试将加密从Code迁移到数据库以加快速度。当我尝试使用此select语句解密信息时,我得到一个不正确的参数计数错误。

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

我查看了文档,这应该有效。有人能告诉我我做错了吗?

EDIT 我试过重启MySQL服务器无济于事。服务器版本为5.6.22

1 个答案:

答案 0 :(得分: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/

编辑 - 实际修复

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

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

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

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

ERROR 1582(42000):调用本机函数'aes_encrypt'时参数计数不正确      MySQL的> SELECT HEX(AES_ENCRYPT('test','key',RANDOM_BYTES(16))); + ------------------------------------------------- - + | HEX(AES_ENCRYPT('test','key',RANDOM_BYTES(16)))| + ------------------------------------------------- - + | 2EFBA8708925C1DF8B661E57938FAE5E | + ------------------------------------------------- - + 1排(0.00秒) 请注意,IV本身并不存储在生成的加密输出中 - 这是一个必须单独跟踪以获取解密值的工件:

 mysql> SET @iv = RANDOM_BYTES(16);

查询OK,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秒)