首页 > 数据库 > mysql教程 > 为什么MySQL中的加密数据无法解密?

为什么MySQL中的加密数据无法解密?

Susan Sarandon
发布: 2024-11-19 03:20:02
原创
731 人浏览过

Why Can't I Decrypt Encrypted Data in MySQL?

无法解密 MySQL 中的加密数据

MySQL 中使用 AES_ENCRYPT() 函数来加密数据,而 AES_DECRYPT() 是用于解密加密数据。然而,在查询加密数据时,用户可能会遇到解密数据不可见的问题。

要解决此问题,重要的是要了解 AES_ENCRYPT() 返回二进制字符串,而 AES_DECRYPT() 返回原始字符串。因此,在选择加密数据时,必须将解密结果显式转换回字符串。

例如,考虑下表:

CREATE TABLE `user` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `first_name` VARBINARY(100) NULL,
  `address` VARBINARY(200) NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
登录后复制

可以将数据插入到表中使用 AES_ENCRYPT() 函数:

INSERT INTO user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'), AES_ENCRYPT('Obama', 'usa2010'));
登录后复制

但是,在查询加密数据时,以下查询将不会显示原始数据string:

SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') FROM user;
登录后复制

相反,解密结果将是一个不可见的二进制字符串。要解决此问题,可以修改查询以将解密的数据转换回字符串:

SELECT *,
       CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt
FROM user
登录后复制

first_name_decrypt 列现在将包含原始字符串,允许用户按预期查看其数据。

以上是为什么MySQL中的加密数据无法解密?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板