国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java基于AES對稱加密算法實現的加密與解密功能示例

2019-11-26 13:19:09
字體:
來源:轉載
供稿:網友

本文實例講述了java基于AES對稱加密算法實現的加密與解密功能。分享給大家供大家參考,具體如下:

package com.soufun.com;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.Date;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;/** * @author WHD */public class AesUtil {  private static final String AES="AES";  private static final String UTF8="UTF-8";  static KeyGenerator kgen =null;  static{    try {      kgen= KeyGenerator.getInstance(AES);    } catch (NoSuchAlgorithmException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }  /*   * @param content:   * @param password:   */  private static byte[] encrypt(String content, String password) {    try {      // 使用靜態代碼塊來生成KeyGenerator對象      //KeyGenerator kgen = KeyGenerator.getInstance(AES);      // 使用128 位      kgen.init(128, new SecureRandom(password.getBytes()));      SecretKey secretKey = kgen.generateKey();      byte[] encodeFormat = secretKey.getEncoded();      SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);      // Cipher對象實際完成加密操作      Cipher cipher = Cipher.getInstance(AES);      // 加密內容進行編碼      byte[] byteContent = content.getBytes(UTF8);      // 用密匙初始化Cipher對象      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:   */  private static byte[] decrypt(byte[] content, String password) {    try {// 使用靜態代碼塊來生成KeyGenerator對象      //KeyGenerator kgen = KeyGenerator.getInstance(AES);      // 使用128 位      kgen.init(128, new SecureRandom(password.getBytes()));      SecretKey secretKey = kgen.generateKey();      byte[] encodeFormat = secretKey.getEncoded();      SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);      // Cipher對象實際完成加密操作      Cipher cipher = Cipher.getInstance(AES);      // 用密匙初始化Cipher對象      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;  }  /**   * 二進制--》十六進制轉化   * @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();  }  /**   * 十六進制--》二進制轉化   * @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;  }  public static void main(String[] args) throws UnsupportedEncodingException {    long begin=new Date().getTime();    String content = "aaades加密測試";    String password = "12345678dd";    // 加密    System.out.println("加密前:" + content);    byte[] encryptResult = encrypt(content, password);    String encryptResultStr = parseByte2HexStr(encryptResult);    System.out.println("加密后:" + encryptResultStr);    // 解密    byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);    byte[] decryptResult = decrypt(decryptFrom, password);    // 解密內容進行解碼    String result = new String(decryptResult, UTF8);    System.out.println("解密后:" + result);    long end= new Date().getTime();    System.out.println(end-begin);  }}

注:SecureRandom是生成安全隨機數序列,password.getBytes()是種子,只要種子相同,序列就一樣,所以解密只要有password就行,可以復原這個序列。

PS:關于加密解密感興趣的朋友還可以參考本站在線工具:

密碼安全性在線檢測:
http://tools.VeVB.COm/password/my_password_safe

高強度密碼生成器:
http://tools.VeVB.COm/password/CreateStrongPassword

迅雷、快車、旋風URL加密/解密工具:
http://tools.VeVB.COm/password/urlrethunder

在線散列/哈希算法加密工具:
http://tools.VeVB.COm/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.VeVB.COm/password/hash_md5_sha

在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.VeVB.COm/password/sha_encode

希望本文所述對大家java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长白| 朝阳县| 徐州市| 通河县| 新宁县| 岳池县| 屏山县| 大城县| 塔河县| 新泰市| 肥东县| 中山市| 赤峰市| 宁乡县| 兰溪市| 思茅市| 博野县| 衡水市| 册亨县| 临清市| 城固县| 乐都县| 富宁县| 达拉特旗| 紫阳县| 南康市| 玉林市| 香港| 天津市| 桐城市| 华蓥市| 安化县| 吉安市| 贵港市| 曲阜市| 上蔡县| 民丰县| 株洲市| 张家界市| 墨玉县| 永春县|