在我开始在我的应用程序中使用MySQL之前,我只是在测试MySQLAES_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
我想用AES256
最佳答案
显然,您需要使用与此操作相同的init_vector
第三个参数:
> set @a=RANDOM_BYTES(16);
> SELECT AES_DECRYPT(AES_ENCRYPT('SERV92','TESTTTTTTT',@a),'TESTTTTTTT',@a) AS `TEST`;
+--------+
| TEST |
+--------+
| SERV92 |
+--------+
在您的例子中,您使用了两次随机字节(16),以便在加密和解密中使用不同的值。