在我开始在我的应用程序中使用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),以便在加密和解密中使用不同的值。

07-26 06:12