我只是在测试 MySQL AES_ENCRYPT()
和 AES_DECRYPT()
之后才开始在我的应用程序中使用它。所以我写了一个简单的查询来测试它:
SELECT AES_DECRYPT(AES_ENCRYPT('SERV92','TESTTTTTTT'),'TESTTTTTTT') AS `TEST`
我得到一个错误,因为 AES_ENCRYPT()
中的参数太少
我做了一些研究,发现我的 MySQL 版本 (5.6) 确实需要一个额外的参数,所以我重写了查询
SELECT AES_DECRYPT(AES_ENCRYPT('SERV92','TESTTTTTTT',RANDOM_BYTES(16)),'TESTTTTTTT',RANDOM_BYTES(16)) AS `TEST`
结果:
+-----------+
| TEST |
|-----------|
| NULL |
+-----------+
重要的 MySQL 变量:
block encryption mode=aes-256-cbc
我正在尝试使用 AES 256
最佳答案
您显然需要使用相同的 init_vector
第三个参数,因为它有效:
> set @a=RANDOM_BYTES(16);
> SELECT AES_DECRYPT(AES_ENCRYPT('SERV92','TESTTTTTTT',@a),'TESTTTTTTT',@a) AS `TEST`;
+--------+
| TEST |
+--------+
| SERV92 |
+--------+
在您的情况下,您使用了 RANDOM_BYTES(16) 两次,以便在加密和解密中使用不同的值。
关于mysql - 如何使用 MySQL aes_encrypt 和 aes_decrypt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405021/