You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL查询语句进行解密操作?

解决MySQL AES_DECRYPT返回十六进制的问题

别急,我来帮你搞定这个解密的困扰!首先我们先搞清楚为什么你用AES_DECRYPT会返回十六进制格式——因为AES_ENCRYPT生成的是二进制字符串,当你直接查询AES_DECRYPT的结果时,MySQL会默认把二进制数据以十六进制的形式展示,所以需要显式转换成字符类型才能看到明文密码。

正确的解密查询语句

针对你的表结构,直接用CAST或者CONVERT就能解决问题,这里给你两种可行的写法:

写法1:使用CAST转换为字符类型

SELECT 
  username,
  CAST(AES_DECRYPT(password, 'key1234') AS CHAR) AS decrypted_password
FROM user
WHERE username = 'userx';

写法2:使用CONVERT指定字符集(更稳妥)

如果你的数据库用的是utf8mb4这类字符集,指定字符集转换能避免乱码问题:

SELECT 
  username,
  CONVERT(AES_DECRYPT(password, 'key1234') USING utf8mb4) AS decrypted_password
FROM user
WHERE username = 'userx';

登录环节更安全的验证方式

其实在登录时,完全不需要解密密码——你可以把用户输入的密码用同样的AES_ENCRYPT加密后,直接和数据库里的密文对比,这样既避免了解密操作,也更安全:

SELECT *
FROM user
WHERE username = 'userx' 
  AND password = AES_ENCRYPT('用户输入的密码', 'key1234');

如果查询返回结果,说明密码正确;反之则验证失败。

关于你提到的SHA1算法的注意点

你说事后选择了SHA1,这里要提醒你:SHA1是哈希算法,不是加密算法,它是不可逆的——也就是说,你无法对SHA1生成的哈希值进行“解密”操作。

如果用SHA1实现登录验证,逻辑是:

  • 注册时:存储SHA1('用户密码')到数据库
  • 登录时:计算用户输入密码的SHA1哈希,和数据库里的值对比:
    SELECT *
    FROM user
    WHERE username = 'userx' 
      AND password = SHA1('用户输入的密码');
    

为什么你之前的CAST无效?

大概率是字符集不匹配的问题——比如你的password字段存储时用的字符集和CAST转换时默认的字符集不一致,换成CONVERT指定和数据库一致的字符集(比如utf8mb4)就能解决。

内容的提问来源于stack exchange,提问作者DDC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:42:30