zoukankan      html  css  js  c++  java
  • 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),'netmarch') as B,aes_decrypt(unhex(NMEDF1FBF775090C9B),'netmarch') 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('netmarch');
      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函数十六进制化。

    INSERT INTO tablename VALUES (HEX(AES_ENCRYPT('hello world''key2')));
    最后先将加密后的串通过UNHEX取出,再通过AES据密钥'key2'解密:

    SELECT AES_DECRYPT(UNHEX(pass1), 'key2') FROM tablename;

  • 相关阅读:
    画江恩线
    从装饰者模式的理解说JAVA的IO包
    Form表单标签的Enctype属性的作用及应用示例介绍
    spring中的通配符
    简析SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue
    Java数据封装成树形结构,多级
    详解InitializingBean、initMethod和@PostConstruct
    SpringCloud确保服务只能通过gateway转发访问,禁止直接调用接口访问
    Spring中的InitializingBean接口的使用
    Linux下Centos7对外开放端口
  • 原文地址:https://www.cnblogs.com/songyaru/p/12842671.html
Copyright © 2011-2022 走看看