0
点赞
收藏
分享

微信扫一扫

mysql加解密--你学废了么

今天研究mysql的解密的时候发现数据入库之后可以自己加密,网上搜索了一下,数据库加密方式有这些。

这里主要是说明 AES_DECRYPT()AES_ENCRYPT()两个函数的用法

AES_DECRYPT(str, key_str) -- 使用 AES 解密
AES_ENCRYPT(str, key_str) -- 使用 AES 加密

-- AES_ENCRYPT()使用密钥字符串 key_str 对字符串str进行加密,
--		并返回包含加密输出的二进制字符串。 
-- AES_DECRYPT()使用密钥字符串 key_str 解密加密的字符串 crypt_str 
-- 		并返回原始的纯文本字符串。如果任何一个函数参数均为NULL,则函数返回NULL。

假设我需要对下面这句话进行一个加密

中国人不骗中国人

那么他的sql语句就是 SELECT hex(AES_ENCRYPT('中国人不骗中国人','sinmu'));

  1. 这里的 sinmu 就是我写的key_str,也就是我们代码中的密钥。
  2. AES_ENCRYPT() 就是mysql自带的加密函数
  3. hex() 是将结果转为16进制

如果想要解密的话,建议使用这个sql语句:

SELECT cast(AES_DECRYPT(unhex('916B95B090DD381D4618729A9D080547764C508AC2DD0C2DBE237464ACE3CB7D'),'sinmu') AS CHAR);
  1. 同样的 sinmu 为密钥
  2. 916B95B090DD381D4618729A9D080547764C508AC2DD0C2DBE237464ACE3CB7D 这个长字符串是由上面加密得到的,他是一个16进制的结果,所以我们需要用 unhex() 来转为字符
  3. AES_DECRYPT 是数据库自带的解密函数
  4. 最外层的 case()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一:BINARYCHARDATEDATETIMETIMEDECIMALSIGNEDUNSIGNED。其语法是 cast('1' as UNSIGNED)
SELECT hex(AES_ENCRYPT('中国人不骗中国人','sinmu'));
-- 916B95B090DD381D4618729A9D080547764C508AC2DD0C2DBE237464ACE3CB7D

SELECT cast(AES_DECRYPT(unhex('916B95B090DD381D4618729A9D080547764C508AC2DD0C2DBE237464ACE3CB7D'),'sinmu') AS CHAR);
-- 中国人不骗中国人
举报

相关推荐

0 条评论