zoukankan      html  css  js  c++  java
  • AES加密demo

    需要引入的jar包:
    

    <!-- aes加密 base64 -->
      <dependency>
       <groupId>org.apache.axis</groupId>
       <artifactId>axis</artifactId>
       <version>1.4</version>
      </dependency>


    package cn.iautos.mall.utils;

    import java.io.UnsupportedEncodingException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;

    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;

    import org.apache.axis.encoding.Base64;

    import cn.iautos.mall.common.Constant;

    /**
     * aes加密算法
     *
     * @author xuzhenmin
     * @version 2014-3-30 下午2:27:01
     */
    public class AESUtil {

     /**
      * 加密
      *
      * @param content
      *            需要加密的内容
      * @param password
      *            加密密码
      * @return
      */
     private static byte[] encrypt(String content, String password) {
      try {
       KeyGenerator kgen = KeyGenerator.getInstance("AES");
       kgen.init(128, new SecureRandom(password.getBytes()));
       SecretKey secretKey = kgen.generateKey();
       byte[] enCodeFormat = secretKey.getEncoded();
       SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
       Cipher cipher = Cipher.getInstance("AES");// 创建密码器
       byte[] byteContent = content.getBytes("utf-8");
       cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
       byte[] result = cipher.doFinal(byteContent);
       return result; // 加密
      } catch (NoSuchAlgorithmException e) {
       e.printStackTrace();
      } catch (NoSuchPaddingException e) {
       e.printStackTrace();
      } catch (InvalidKeyException e) {
       e.printStackTrace();
      } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
      } catch (IllegalBlockSizeException e) {
       e.printStackTrace();
      } catch (BadPaddingException e) {
       e.printStackTrace();
      }
      return null;
     }

     /**
      * 解密
      *
      * @param content
      *            待解密内容
      * @param password
      *            解密密钥
      * @return
      */
     private static byte[] decrypt(byte[] content, String password) {
      try {
       KeyGenerator kgen = KeyGenerator.getInstance("AES");
       kgen.init(128, new SecureRandom(password.getBytes()));
       SecretKey secretKey = kgen.generateKey();
       byte[] enCodeFormat = secretKey.getEncoded();
       SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
       Cipher cipher = Cipher.getInstance("AES");// 创建密码器
       cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
       byte[] result = cipher.doFinal(content);
       return result; // 加密
      } catch (NoSuchAlgorithmException e) {
       e.printStackTrace();
      } catch (NoSuchPaddingException e) {
       e.printStackTrace();
      } catch (InvalidKeyException e) {
       e.printStackTrace();
      } catch (IllegalBlockSizeException e) {
       e.printStackTrace();
      } catch (BadPaddingException e) {
       e.printStackTrace();
      }
      return null;
     }

     /**
      * 将二进制转换成16进制
      *
      * @param buf
      * @return
      */
     private static String parseByte2HexStr(byte buf[]) {
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < buf.length; i++) {
       String hex = Integer.toHexString(buf[i] & 0xFF);
       if (hex.length() == 1) {
        hex = '0' + hex;
       }
       sb.append(hex.toUpperCase());
      }
      return sb.toString();
     }

     /**
      * 将16进制转换为二进制
      *
      * @param hexStr
      * @return
      */
     private static byte[] parseHexStr2Byte(String hexStr) {
      if (hexStr.length() < 1)
       return null;
      byte[] result = new byte[hexStr.length() / 2];
      for (int i = 0; i < hexStr.length() / 2; i++) {
       int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
       int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
         16);
       result[i] = (byte) (high * 16 + low);
      }
      return result;
     }

     /**
      * 加密
      *
      * @param content
      *            需要加密的内容
      * @param password
      *            加密密码
      * @return
      */
     private static byte[] encrypt2(String content, String password) {
      try {
       SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
       Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
       byte[] byteContent = content.getBytes("utf-8");
       cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
       byte[] result = cipher.doFinal(byteContent);
       return result; // 加密
      } catch (NoSuchAlgorithmException e) {
       e.printStackTrace();
      } catch (NoSuchPaddingException e) {
       e.printStackTrace();
      } catch (InvalidKeyException e) {
       e.printStackTrace();
      } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
      } catch (IllegalBlockSizeException e) {
       e.printStackTrace();
      } catch (BadPaddingException e) {
       e.printStackTrace();
      }
      return null;
     }

     public static String getEncodeMsg(String msg) {
      byte[] encryptResult = encrypt(msg, Constant.MALL_SECURITY_AES_KEY);
    //  return new String(Base64.encode(encryptResult));
      return parseByte2HexStr(encryptResult);

     }

     public static String getDecodeMsg(String msg) {
      
      byte[] decryptResult = decrypt(parseHexStr2Byte(msg),
        Constant.MALL_SECURITY_AES_KEY);
      return new String(decryptResult);
     }

    // public static void main(String[] args) {
    //  String content = "test";
    //  String msg = getEncodeMsg(content);
    //  System.out.println("加密后:" + msg);
    //  // 解密
    //  System.out.println("解密后:" + getDecodeMsg(msg));
    // }

    }


  • 相关阅读:
    Python 内置函数
    Python OS 文件/目录方法
    python import导入模块
    Python 变量、作用域、闭包
    Python3 迭代器(generate)与生成器(yield) 装饰器(decorator) 上下文管理器(context manager)
    SpringBoot Admin的简单使用
    java学习网址
    idea的破解码
    Jmeter响应内容显示乱码问题的解决办法
    ClickHouse 库引擎
  • 原文地址:https://www.cnblogs.com/xuzhenmin/p/3633824.html
Copyright © 2011-2022 走看看