AES_DECRYPT需配合CONVERT或CAST转字符串才能显示明文,密钥必须完全一致,带IV加密需补第三参数,UNHEX()用于十六进制字符串解密,返回NULL主因是密钥错、字符集不匹配或字段截断。直接用 AES_DECRYPT 在 SQL 窗口里查,但必须配对 AES_ENCRYPT 的密钥和模式phpmyadmin 本身不提供"一键解密预览"功能,aes_decrypt 是 mysql 原生函数,能用,但结果默认是 varbinary 或乱码------除非你显式转成字符串。常见错误是只写 aes_decrypt(col, 'key'),返回一堆十六进制字节,看着像空或 null。必须用 CONVERT(AES_DECRYPT(col, 'key') USING utf8mb4) 或 CAST(... AS CHAR) 转成可读文本密钥必须和加密时完全一致(包括大小写、空格、长度),MySQL 5.7+ 默认用 AES-128-ECB,没 IV;如果原先是用 AES_ENCRYPT(data, key, iv)(带 IV 的 AES-256-CBC),这里也得补上第三个参数如果加密字段是 BLOB 或 VARBINARY 类型,直接解密没问题;但如果是 VARCHAR 存的十六进制字符串(比如 '4a6f686e'),得先用 UNHEX() 转回二进制再解密为什么 AES_DECRYPT 返回 NULL?三个最常漏掉的条件NULL 不代表数据坏了,大概率是解密失败触发了 MySQL 的静默失败策略。它只在密钥错、编码错、或输入非有效密文时返回 NULL,不报错。密钥长度不对:AES_ENCRYPT 要求密钥自动补位或截断到 16/24/32 字节,但你自己传的字符串长度若没对齐(比如传了 17 字节的字符串),MySQL 处理逻辑和 PHP 的 openssl_encrypt 不一致,容易错字符集不匹配:加密前数据是 utf8mb4,但连接字符集是 latin1,AES_ENCRYPT 会按 latin1 编码后加密,解密后再用 utf8mb4 解,必然乱码或 NULL字段被截断过:如果加密后存进 VARCHAR(50),但实际密文需要 64 字节,MySQL 自动截断,解密时输入不完整,直接返回 NULLphpMyAdmin 里怎么快速验证密钥和解密逻辑?别在业务表上反复试,用 SELECT 构造最小闭环测试。先确认当前连接字符集:SELECT @@character_set_client, @@collation_connection;,确保和加密时一致用已知明文现场加密再解密:SELECT CONVERT(AES_DECRYPT(AES_ENCRYPT('hello world', 'mykey123'), 'mykey123') USING utf8mb4) AS result; ------ 如果返回 hello world,说明密钥和环境 OK查真实数据时加 LENGTH() 和 HEX() 辅助诊断:SELECT id, LENGTH(encrypted_col), HEX(encrypted_col) FROM table LIMIT 3;,看密文长度是否合理(AES-128-ECB 下,每 16 字节明文 → 16 字节密文,且需填充)别把 phpMyAdmin 当解密工具用它只是个 SQL 执行界面,没有密钥管理、没有 IV 存储、也不校验加密上下文。真正线上系统里,AES_DECRYPT 出现在查询里,意味着密钥硬编码在 SQL 中------这本身就是高危操作。 Shakespeare 一款人工智能文案软件,能够创建几乎任何类型的文案。
相关推荐
笃行3503 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具非优秀程序员5 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》用户9562562542910 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结SelectDB10 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系威哥爱编程10 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来这个DBA有点耶10 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返威哥爱编程10 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官2601_9679801111 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒伞伞悦读11 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验新*11 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化