Java中常用的加密方法AES SHA1 md5

现在项目开发基本上都离不开密码加密,鉴权签名等。本篇笔记主要记录项目开发中常用的加密方法AES、SHA1、MD5在Java语言中的实现。

  1. package com.luo.util;
  2. import java.io.UnsupportedEncodingException;
  3. import java.security.InvalidKeyException;
  4. import java.security.MessageDigest;
  5. import java.security.NoSuchAlgorithmException;
  6. import java.security.SecureRandom;
  7. import javax.crypto.BadPaddingException;
  8. import javax.crypto.Cipher;
  9. import javax.crypto.IllegalBlockSizeException;
  10. import javax.crypto.KeyGenerator;
  11. import javax.crypto.NoSuchPaddingException;
  12. import javax.crypto.SecretKey;
  13. import javax.crypto.spec.SecretKeySpec;
  14. public class DecriptUtil {
  15.     /** 
  16.      *  AES加密
  17.      * @parameter: str:待加密字符串,secretKeyBase:用于生成密钥的基础字符串
  18.      * @return:  加密字节数组
  19.     **/
  20.     public static byte[] encryptAES(String str, String secretKeyBase) {
  21.         try {
  22.             KeyGenerator kgen = KeyGenerator.getInstance("AES");
  23.             kgen.init(128new SecureRandom(secretKeyBase.getBytes()));
  24.             SecretKey secretKey = kgen.generateKey();
  25.             byte[] enCodeFormat = secretKey.getEncoded();
  26.             SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
  27.             Cipher cipher = Cipher.getInstance("AES");// 创建密码器
  28.             byte[] byteContent = str.getBytes("UTF-8");
  29.             cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
  30.             byte[] result = cipher.doFinal(byteContent);
  31.             return result; // 加密
  32.         } catch (NoSuchAlgorithmException e) {
  33.             e.printStackTrace();
  34.         } catch (NoSuchPaddingException e) {
  35.             e.printStackTrace();
  36.         } catch (InvalidKeyException e) {
  37.             e.printStackTrace();
  38.         } catch (UnsupportedEncodingException e) {
  39.             e.printStackTrace();
  40.         } catch (IllegalBlockSizeException e) {
  41.             e.printStackTrace();
  42.         } catch (BadPaddingException e) {
  43.             e.printStackTrace();
  44.         }
  45.         return null;
  46.     }
  47.     /** 
  48.      * AES解密
  49.      * @parameter: strByteArray:待解密字节数组,
  50.      * @parameter: secretKeyBase:用于生成密钥的基础字符串, 需要注意的是EAS是对称加密,所以secretKeyBase在加密解密时要一样的
  51.      * @return:  解密后字符串
  52.     **/
  53.     public static String decryptAES(byte[] strByteArray, String secretKeyBase) {
  54.         try {
  55.             KeyGenerator kgen = KeyGenerator.getInstance("AES");
  56.             kgen.init(128new SecureRandom(secretKeyBase.getBytes()));
  57.             SecretKey secretKey = kgen.generateKey();
  58.             byte[] enCodeFormat = secretKey.getEncoded();
  59.             SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
  60.             Cipher cipher = Cipher.getInstance("AES");// 创建密码器
  61.             cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
  62.             String result = new String(cipher.doFinal(strByteArray),"UTF-8");
  63.             return result; // 加密
  64.         } catch (NoSuchAlgorithmException e) {
  65.             e.printStackTrace();
  66.         } catch (NoSuchPaddingException e) {
  67.             e.printStackTrace();
  68.         } catch (InvalidKeyException e) {
  69.             e.printStackTrace();
  70.         } catch (IllegalBlockSizeException e) {
  71.             e.printStackTrace();
  72.         } catch (BadPaddingException e) {
  73.             e.printStackTrace();
  74.         } catch (UnsupportedEncodingException e) {
  75.             e.printStackTrace();
  76.         }
  77.         return null;
  78.     }
  79.     /** 
  80.      *  SHA、SHA1加密
  81.      * @parameter:   str:待加密字符串
  82.      * @return:  加密串
  83.     **/
  84.     public static String SHA1(String str) {
  85.         try {
  86.             MessageDigest digest = java.security.MessageDigest
  87.                     .getInstance("SHA-1"); //如果是SHA加密只需要将"SHA-1"改成"SHA"即可
  88.             digest.update(str.getBytes());
  89.             byte messageDigest[] = digest.digest();
  90.             // Create Hex String
  91.             StringBuffer hexStr = new StringBuffer();
  92.             // 字节数组转换为 十六进制 数
  93.             for (int i = 0; i < messageDigest.length; i++) {
  94.                 String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
  95.                 if (shaHex.length() < 2) {
  96.                     hexStr.append(0);
  97.                 }
  98.                 hexStr.append(shaHex);
  99.             }
  100.             return hexStr.toString();
  101.         } catch (NoSuchAlgorithmException e) {
  102.             e.printStackTrace();
  103.         }
  104.         return null;
  105.     }
  106.     /** 
  107.      *  MD5加密
  108.      * @parameter:   str:待加密字符串
  109.      * @return:  加密串
  110.     **/
  111.     public static String MD5(String str) {
  112.         try {
  113.             // 获得MD5摘要算法的 MessageDigest 对象
  114.             MessageDigest mdInst = MessageDigest.getInstance("MD5");
  115.             // 使用指定的字节更新摘要
  116.             mdInst.update(str.getBytes());
  117.             // 获得密文
  118.             byte[] md = mdInst.digest();
  119.             // 把密文转换成十六进制的字符串形式
  120.             StringBuffer hexString = new StringBuffer();
  121.             // 字节数组转换为 十六进制 数
  122.             for (int i = 0; i < md.length; i++) {
  123.                 String shaHex = Integer.toHexString(md[i] & 0xFF);
  124.                 if (shaHex.length() < 2) {
  125.                     hexString.append(0);
  126.                 }
  127.                 hexString.append(shaHex);
  128.             }
  129.             return hexString.toString();
  130.         } catch (NoSuchAlgorithmException e) {
  131.             e.printStackTrace();
  132.         }
  133.         return null;
  134.     }
  135. }

上述代码可以直接当作类库在项目中进行调用。

波波
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!