MySQL使用AES_ENCRYPT()/AES_DECRYPT() 加解密 + mysql hex与unhex存取数据
数据库中加密后的内容
hex:可以用HEX()函数将一个字符串或数字转换为十六进制格式的字符串
unhex:把十六进制格式的字符串转化为原来的格式
备注:
以下 CloumnName为字段名,DESKey是des加密秘钥,tablename为表名,根据需要自行修改。
1、select 方法:
1 select aes_decrypt(unhex(CloumnName),'DESKey') as A,aes_decrypt(unhex(NM090D5CB6C0DFAE21),'key') as B,aes_decrypt(unhex(NMEDF1FBF775090C9B),'key') as C 2 from tablename
2、把加密解密方法存为function的调用方法
1) Decryptt :解密的function
CREATE DEFINER=`root`@`%` FUNCTION `Decryptt`(`input` varchar(2000)) RETURNS varchar(5000) CHARSET utf8 begin declare i_key varchar(128) default('DESKey'); declare v_out varchar(5000); declare error_s integer default 0; declare continue handler for sqlexception,sqlwarning set error_s =1; select aes_decrypt(unhex(input),i_key) into v_out; if error_s then set v_out=input; end if; return v_out; end
select方法: select Decryptt(CloumnName) as Afrom tablename
2)Encryptt:加密的function
CREATE DEFINER=`root`@`%` FUNCTION `Encryptt`(`input` varchar(2000)) RETURNS varchar(5000) CHARSET utf8 begin declare i_key varchar(128) default('key'); declare v_out varchar(5000); declare error_s integer default 0; declare continue handler for sqlexception,sqlwarning set error_s =1; select hex(aes_encrypt(input,i_key)) into v_out; if error_s then set v_out=input; end if; return v_out; end
3、用HEX()来存入加密后的密文,用UNHEX()取出再解密。
例:将'hello world'先用密钥'key2'进行AES加密,再将加密后的串通过HEX函数十六进制化。
例:将'hello world'先用密钥'key2'进行AES加密,再将加密后的串通过HEX函数十六进制化。
INSERT INTO tablename VALUES (HEX(AES_ENCRYPT('hello world', 'key2')));
最后先将加密后的串通过UNHEX取出,再通过AES据密钥'key2'解密:
SELECT AES_DECRYPT(UNHEX(pass1), 'key2') FROM tablename;