mysql - 如何使用 MySQL aes_encrypt 和 aes_decrypt?

标签 mysql security aes

我只是在测试 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/

相关文章:

MySql 将字符串存储在变量中并将它们连接起来以将它们返回到终端

java - 在 java 中执行 mysql 行时出错

security - 应用程序内的简单 Active Directory 集成 - 应用程序商店应该包含什么?

python - 使用 Objective-C 加密数据并在 Python 中解密

java - 使用哪个版本的 AES?

ios - 如何解密来自python的加密字符串?

mysql - 如何在mysql中比较不同格式的字符串作为日期

PHP 和 MySql 错误

security - 没有通配符的子域的 SSL

c# - 阻止用于访问资源的危险 IP