zoukankan      html  css  js  c++  java
  • 【Java】AES加机解密工具类代码

     1 import java.security.NoSuchAlgorithmException;
     2 import java.security.SecureRandom;
     3 
     4 import javax.crypto.Cipher;
     5 import javax.crypto.KeyGenerator;
     6 import javax.crypto.SecretKey;
     7 import javax.crypto.spec.SecretKeySpec;
     8 
     9 public final class AES {
    10    //加密
    11     public static String encrypt(String content, String key) throws Exception {
    12 
    13         Cipher cipher = Cipher.getInstance("AES");
    14         cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(generateKey(key).getEncoded(), "AES"));
    15         byte[] b = cipher.doFinal(content.getBytes("UTF-8"));
    16 
    17         if (b == null || b.length == 0) {
    18             return "";
    19         }
    20 
    21         StringBuffer buf = new StringBuffer();
    22         for (int i = 0; i < b.length; i++) {
    23 
    24             String hex = Integer.toHexString(b[i] & 0xFF);
    25 
    26             if (hex.length() == 1) {
    27                 hex = '0' + hex;
    28             }
    29             buf.append(hex.toUpperCase());
    30         }
    31         return buf.toString();
    32     }
    33     //解密
    34     public static String decrypt(String content, String key) throws Exception {
    35 
    36         if (content == null || content.length() == 0) {
    37             return null;
    38         }
    39 
    40         byte[] b = new byte[content.length() / 2];
    41         for (int i = 0; i < content.length() / 2; i++) {
    42             int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
    43             int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
    44             b[i] = (byte) (high * 16 + low);
    45         }
    46 
    47         Cipher cipher = Cipher.getInstance("AES");
    48         cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(generateKey(key).getEncoded(), "AES"));
    49 
    50         return new String(cipher.doFinal(b));
    51     }
    52 
    53     private static SecretKey generateKey(String key) throws NoSuchAlgorithmException {
    54 
    55         SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
    56         KeyGenerator kg = KeyGenerator.getInstance("AES");
    57 
    58         secureRandom.setSeed(key.getBytes());
    59         kg.init(128, secureRandom);
    60 
    61         return kg.generateKey();
    62     }
    63    //测试
    64     public static void main(String[] args) {
    65 
    66         try {
    67             String str = "AES测试";
    68             String secretKey = "秘钥";
    69 
    70             System.out.println("秘钥:" + secretKey);
    71             System.out.println("明文:" + str);
    72 
    73             String str0 = encrypt(str, secretKey);
    74             System.out.println("密文:" + str0);
    75             System.out.println("解密:" + decrypt(str0, secretKey));
    76 
    77         } catch (Exception e) {
    78             e.printStackTrace();
    79         }
    80     }
    81 }
  • 相关阅读:
    2016北京集训测试赛(十四)Problem A: 股神小L
    2016北京集训测试赛(十三) Problem B: 网络战争
    BZOJ 3473 字符串
    2016北京集训测试赛(十一)Problem C: 树链问题
    微信服务号登陆优化
    重新认识下数组的concat方法
    微信服务号开发碰到的缓存问题!
    关于微信服务号开发的一些总结!
    JQ-weui中的日期选择控件关于时间段的设置!
    用json方法来作深拷贝应该知道的一点东西!
  • 原文地址:https://www.cnblogs.com/itworkers/p/11770916.html
Copyright © 2011-2022 走看看