zoukankan      html  css  js  c++  java
  • Java实现AES加密解密

        原文地址:https://blog.csdn.net/spidermansun/article/details/84942010

      1 public class AES {
      2     /**
      3      * AES加密
      4      *
      5      * @param plaintext 明文
      6      * @param Key 密钥
      7      * @param EncryptMode AES加密模式,CBC或ECB
      8      * @return 该字符串的AES密文值
      9      */
     10     public static String AES_Encrypt(Object plaintext, String Key,String EncryptMode) {
     11         String PlainText=null;
     12         try {
     13             PlainText=plaintext.toString();
     14             if (Key == null) {
     15                 return null;
     16             }
     17             Key = getMD5(Key);
     18             byte[] raw = Key.getBytes("utf-8");
     19             SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
     20             Cipher cipher = Cipher.getInstance("AES/"+EncryptMode+"/PKCS5Padding");
     21             if(EncryptMode=="ECB") {
     22                 cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
     23             }else {
     24                 IvParameterSpec iv = new IvParameterSpec(Key.getBytes("utf-8"));//使用CBC模式,需要一个向量iv,可增加加密算法的强度
     25                 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
     26             }
     27             byte[] encrypted = cipher.doFinal(PlainText.getBytes("utf-8"));
     28             String encryptedStr=new String(new BASE64Encoder().encode(encrypted));
     29             return encryptedStr;
     30             //return new String(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
     31         } catch (Exception ex) {
     32             System.out.println(ex.toString());
     33             return null;
     34         }
     35     }
     36  
     37     /**
     38      * AES解密
     39      *
     40      * @param cipertext 密文
     41      * @param Key 密钥
     42      * @param EncryptMode AES加密模式,CBC或ECB
     43      * @return 该密文的明文
     44      */
     45     public static String AES_Decrypt(Object cipertext, String Key,String EncryptMode) {
     46         String CipherText=null;
     47         try {
     48             CipherText=cipertext.toString();
     49             // 判断Key是否正确
     50             if (Key == null) {
     51                 //System.out.print("Key为空null");
     52                 return null;
     53             }
     54             Key=getMD5(Key);
     55             byte[] raw = Key.getBytes("utf-8");
     56             SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
     57             Cipher cipher=Cipher.getInstance("AES/"+EncryptMode+"/PKCS5Padding");
     58             if(EncryptMode=="ECB") {
     59                 cipher.init(Cipher.DECRYPT_MODE, skeySpec);
     60             }
     61             else
     62             {
     63                 IvParameterSpec iv = new IvParameterSpec(Key.getBytes("utf-8"));//使用CBC模式,需要一个向量iv,可增加加密算法的强度
     64                 cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
     65             }
     66             byte[] encrypted1 = new BASE64Decoder().decodeBuffer(CipherText);//先用base64解密
     67             //byte[] encrypted1 = CipherText.getBytes();
     68             try {
     69                 byte[] original = cipher.doFinal(encrypted1);
     70                 String originalString = new String(original,"utf-8");
     71                 return originalString;
     72             } catch (Exception e) {
     73                 System.out.println(e.toString());
     74                 return null;
     75             }
     76         } catch (Exception ex) {
     77             System.out.println(ex.toString());
     78             return null;
     79         }
     80     }
     81     /**
     82      * 进行MD5加密
     83      *
     84      * @param s 要进行MD5转换的字符串
     85      * @return 该字符串的MD5值的8-24位
     86      */
     87     public static String getMD5(String s){
     88         char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
     89  
     90         try {
     91             byte[] btInput = s.getBytes();
     92             // 获得MD5摘要算法的 MessageDigest 对象
     93             MessageDigest mdInst = MessageDigest.getInstance("MD5");
     94             // 使用指定的字节更新摘要
     95             mdInst.update(btInput);
     96             // 获得密文
     97             byte[] md = mdInst.digest();
     98             // 把密文转换成十六进制的字符串形式
     99             int j = md.length;
    100             char str[] = new char[j * 2];
    101             int k = 0;
    102             for (int i = 0; i < j; i++) {
    103                 byte byte0 = md[i];
    104                 str[k++] = hexDigits[byte0 >>> 4 & 0xf];
    105                 str[k++] = hexDigits[byte0 & 0xf];
    106             }
    107             return new String(str).substring(8,24);
    108         } catch (Exception e) {
    109             e.printStackTrace();
    110             return null;
    111         }
    112     }
    113 }
    View Code
  • 相关阅读:
    URAL-1998 The old Padawan 二分
    URAL-1997 Those are not the droids you're looking for 二分匹配
    URAL-1991 The battle near the swamp 水题
    URAL-1989 Subpalindromes 多项式Hash+树状数组
    URAL-1987 Nested Segments 线段树简单区间覆盖
    URAL-1981 Parallel and Perpendicular 水题
    k8s-api
    golang test模块
    k8s-calico
    docker设置proxy
  • 原文地址:https://www.cnblogs.com/CYCLearning/p/12187766.html
Copyright © 2011-2022 走看看