无法解密 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中文网其他相关文章!