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

AES加密解密结果异常:加密值无法正常解密还原

问题:AES_ENCRYPT加密后解密返回NULL,无法还原原字符串

执行的SQL语句

SELECT AES_ENCRYPT('fmale', '2b7e151628aed2a6abf7158809cf4f3c') FROM tmp_categorywise_salary_rpt LIMIT 1; 

SELECT CAST(AES_DECRYPT('þ*Ë(|¸R°¢8Ç©', '2b7e151628aed2a6abf7158809cf4f3c') as UTF8) FROM tmp_categorywise_salary_rpt LIMIT 1;

问题描述

执行第一条SQL得到加密值þ*Ë(|¸R°¢8Ç©,但用第二条SQL解密后返回NULL,期望解密后还原为原字符串female。

原因分析

AES_ENCRYPT函数返回的是二进制数据,直接将其当作可见字符串复制或存储时,会因为字符编码(如UTF-8、Latin-1等)的转换丢失部分二进制信息,导致解密时无法识别有效加密数据,最终返回NULL。

解决方案

核心是避免直接处理加密后的二进制字符串,改用十六进制格式存储/传递加密结果:

  1. 加密时转换为十六进制
    使用HEX()函数将加密后的二进制数据转为十六进制字符串,确保存储和复制过程中数据不损坏:
SELECT HEX(AES_ENCRYPT('female', '2b7e151628aed2a6abf7158809cf4f3c')) FROM tmp_categorywise_salary_rpt LIMIT 1;
  1. 解密时还原二进制
    用UNHEX()函数将十六进制字符串还原为二进制数据,再执行解密操作:
SELECT CAST(AES_DECRYPT(UNHEX('替换为第一步得到的十六进制字符串'), '2b7e151628aed2a6abf7158809cf4f3c') AS UTF8) FROM tmp_categorywise_salary_rpt LIMIT 1;

额外注意

原加密语句中的明文是'fmale',但期望还原为'female',这可能是输入时的笔误,请确认原明文是否正确,避免因明文不一致导致结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:22:42