资讯详情

【Java工具类】(27)—AES加密工具类

Java工具类(27)—AES加密工具类

package com.awifi.cloudnative.container.common.utils;  import java.io.UnsupportedEncodingException; import java.security.SecureRandom; import java.util.Random;  import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec;  import com.awifi.cloudnative.container.common.content.ErrorConstants; import com.awifi.cloudnative.container.common.exception.BaseException; import org.apache.tomcat.util.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory;  public class AESUtil { 
             private static final Logger LOG = LoggerFactory.getLogger(AESUtil.
        
         class
         )
         ; 
         public 
         static 
         final 
         String CODE_TYPE 
         = 
         "UTF-8"
         ; 
         //public static final String CODE_TYPE = "gb2312"; 
         public 
         static 
         final 
         String AES_TYPE 
         = 
         "AES/ECB/NoPadding"
         ; 
         private 
         static 
         final 
         String ENCRYPTION 
         = 
         "AES"
         ; 
         private 
         static 
         final 
         String IV 
         = 
         "0000000000000000"
         ; 
         public 
         static 
         String 
         getKey
         (
         ) 
         { 
           
         Random random 
         = 
         new 
         SecureRandom
         (
         )
         ; 
         StringBuilder sb 
         = 
         new 
         StringBuilder
         (
         )
         ; 
         for 
         (
         int i 
         = 
         0
         ; i 
         < 
         16
         ; i
         ++
         ) 
         { 
           
         int number 
         = random
         .
         nextInt
         (
         3
         )
         ; 
         long result 
         = 
         0
         ; 
         switch 
         (number
         ) 
         { 
           
         case 
         0
         : result 
         = 
         Math
         .
         round
         (
         new 
         SecureRandom
         (
         )
         .
         nextInt
         (
         25
         ) 
         + 
         65
         )
         ; sb
         .
         append
         (
         (
         char
         ) result
         )
         ; 
         break
         ; 
         case 
         1
         : result 
         = 
         Math
         .
         round
         (
         new 
         SecureRandom
         (
         )
         .
         nextInt
         (
         25
         ) 
         + 
         97
         )
         ; sb
         .
         append
         (
         String
         .
         valueOf
         (
         (
         char
         ) result
         )
         )
         ; 
         break
         ; 
         case 
         2
         : sb
         .
         append
         (
         String
         .
         valueOf
         (
         new 
         SecureRandom
         (
         )
         .
         nextInt
         (
         10
         )
         )
         )
         ; 
         break
         ; 
         } 
         } 
         // sb.append("123456789012345"); 
         // sb.append("\0"); 
         return sb
         .
         toString
         (
         )
         ; 
         } 
         // public static void main(String args[]) { 
           
         // //生成15位字符串 
         // String key = "yju5pH2e8yo6947F"; 
         // System.out.println("aes秘钥:" + key); 
         // String sign = "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"; 
         // System.out.println(decrypt(sign, key)); 
         // String str = "{\"errorCode\":\"0\",\"errorMsg\":\"成功\"}"; 
         // sign = encrypt(str, key); 
         // System.out.println("加密后:" + sign); 
         // System.out.println("解密后:" + decrypt(sign, key)); 
         // } 
         public 
         AESUtil
         (
         ) 
         { 
           
         } 
         /** * aes加密 * * @param cleartext 待加密串 * @param key * @return base64后的加密串 */ 
         public 
         static 
         String 
         encrypt
         (
         String cleartext
         , 
         String password
         ) 
         { 
           
         try 
         { 
           password 
         = 
         appendZero2Password
         (password
         )
         ; 
         byte
         [
         ] str 
         = cleartext
         .
         getBytes
         (CODE_TYPE
         )
         ; str 
         = 
         completionCodeFor16Bytes
         (str
         )
         ; 
         Cipher cipher 
         = 
         Cipher
         .
         getInstance
         (AES_TYPE
         )
         ; 
         SecretKeySpec key 
         = 
         new 
         SecretKeySpec
         (password
         .
         getBytes
         (
         )
         , ENCRYPTION
         )
         ; 
         // IvParameterSpec iv = new IvParameterSpec(IV.getBytes()); 
         //cipher.init(Cipher.ENCRYPT_MODE, key, vi); cipher
         .
         init
         (
         Cipher
         .ENCRYPT_MODE
         , key
         )
         ; 
         byte
         [
         ] encryptedData 
         = cipher
         .
         doFinal
         (str
         )
         ; 
         String sign 
         = 
         Base64
         .
         encodeBase64String
         (encryptedData
         )
         ; LOG
         .
         debug
         (
         "加密后的字符串:{}"
         , sign
         )
         ; 
         return sign
         ; 
         } 
         catch 
         (
         Exception e
         ) 
         { 
           LOG
         .
         error
         (
         "AES加密失败"
         , e
         )
         ; 
         throw 
         new 
         BaseException
         (
         ErrorConstants
         .ERR_EXCEPTION_000
         , 
         "AES加密失败"
         )
         ; 
         } 
         // Pointer pointer = aesecb(); 
         /* byte[] dst = new byte[200]; Object object = aesecb(dst); System.out.println("pointer:" + object.getClass() + "*******"); return aesecb(dst) + ""; return Base64.encodeBase64String(cleartext.getBytes());*/ 
         } 
         /** * Aes解密 * * @param encrypted 待解密串 * @param key * @return 原始数据 */ 
         public 
         static 
         String 
         decrypt
         (
         String encrypted
         , 
         String password
         ) 
         { 
           
         try 
         { 
           password 
         = 
         appendZero2Password
         (password
         )
         ; 
         byte
         [
         ] byteMi 
         = 
         Base64
         .
         decodeBase64
         (encrypted
         )
         ; byteMi 
         = 
         completionCodeFor16Bytes
         (byteMi
         )
         ; 
         SecretKeySpec key 
         = 
         new 
         SecretKeySpec
         (password
         .
         getBytes
         (
         )
         , ENCRYPTION
         )
         ; 
         Cipher cipher 
         = 
         Cipher
         .
         getInstance
         (AES_TYPE
         )
         ; 
         IvParameterSpec iv 
         = 
         new 
         IvParameterSpec
         (IV
         .
         getBytes
         (
         )
         )
         ; 
         // cipher.init(Cipher.DECRYPT_MODE, key, iv); cipher
         .
         init
         (
         Cipher
         .DECRYPT_MODE
         , key
         )
         ; 
         byte
         [
         ] decryptedData 
         = cipher
         .
         doFinal
         (byteMi
         )
         ; 
         return 
         new 
         String
         (decryptedData
         , 
         "utf-8"
         )
         .
         trim
         (
         )
         ; 
         } 
         catch 
         (
         Exception e
         ) 
         { 
           LOG
         .
         error
         (
         "AES解密失败" 
         + e
         .
         getMessage
         (
         )
         )
         ; 
         throw 
         new 
         BaseException
         (
         ErrorConstants
         .ERR_EXCEPTION_000
         , 
         "AES解密失败"
         )
         ; 
         } 
         /* byte[] byteMi = Base64.decodeBase64(encrypted); byte[] dst = new byte[200]; return aesecb(dst) + ""; byte[] decryptedData = Base64.decodeBase64(encrypted); return new String(decryptedData).trim();*/ 
         } 
         /** * mod16位补全 * * @param str 待加密串 * @return 补全待加密串 * @throws UnsupportedEncodingException 异常 */ 
         public 
         static 
         byte
         [
         ] 
         completionCodeFor16Bytes
         (
         byte
         [
         ] str
         ) 
         throws 
         UnsupportedEncodingException 
         { 
           
         int num 
         = str
         .length
         ; 
         int index 
         = 
         16 
         - num 
         % 
         16
         ; 
         if 
         (index 
         == 
         16
         ) 
         { 
           
         return str
         ; 
         } 
         byte
         [
         ] newStr 
         = 
         new 
         byte
         [str
         .length 
         + index
         ]
         ; 
         System
         .
         arraycopy
         (str
         , 
         0
         , newStr
         , 
         0
         , str
         .length
         )
         ; 
         return newStr
         ; 
         } 
         /** * mod8位补全 * * @param str 待加密串 * @return 补全待加密串 * @throws UnsupportedEncodingException 异常 */ 
         public 
         static 
         byte
         [
         ] 
         completionCodeFor4Bytes
         (
         byte
         [
         ] str
         ) 
         throws 
         UnsupportedEncodingException 
         { 
           
         int num 
         = str
         .length
         ; 
         int index 
         = 
         4 
         - num 
         % 
         4
         ; 
         if 
         (index 
         == 
         4
         ) 
         { 
           
         return str
         ; 
         } 
         byte
         [
         ] newStr 
         = 
         new 
         byte
         [str
         .length 
         + index
         ]
         ; 
         System
         .
         arraycopy
         (str
         , 
         0
         , newStr
         , 
         0
         , str
         .length
         )
         ; 
         return newStr
         ; 
         } 
         /** * 检验密钥并补全 \0 * * @return String * @throws * @author 范涌涛 * @date 2020-05-12 15:22:34 */ 
         private 
         static 
         String 
         appendZero2Password
         (
         String password
         ) 
         { 
           
         if 
         (
         null 
         == password
         ) 
         { 
           LOG
         .
         error
         (
         "AES密钥长度错误"
         )
         ; 
         throw 
         new 
         BaseException
         (
         ErrorConstants
         .INNER_EXCEPTION_010
         , 
         "AES密钥长度错误"
         )
         ; 
         } 
         if 
         (password
         .
         length
         (
         ) 
         == 
         16
         ) 
         { 
           
         return password
         ; 
         } 
         StringBuilder sbBuilder 
         = 
         new 
         StringBuilder
         (password
         )
         ; sbBuilder
         .
         append
         (
         "\0"
         )
         ; 
         return sbBuilder
         .
         toString
         (
         )
         ; 
         } 
         /** 宽带账号解密 * 解密方法 * @param data 要解密的数据 * @param key 解密key * @param iv 解密iv * @return 解密的结果 * @throws Exception */ 
         public 
         static 
         String 
         AccountdesEncrypt
         (
         String data
         , 
         String key
         , 
         String iv
         ) 
         { 
           
         try 
         { 
           
         byte
         [
         ] encrypted1 
         = 
         new 
         Base64
         (
         )
         .
         decode
         (data
         )
         ; 
         Cipher cipher 
         = 
         Cipher
         .
         getInstance
         (
         "AES/CBC/NoPadding"
         )
         ; 
         SecretKeySpec keyspec 
         = 
         new 
         SecretKeySpec
         (key
         .
         getBytes
         (
         )
         , 
         "AES"
         )
         ; 
         IvParameterSpec ivspec 
         = 
         new 
         IvParameterSpec
         (iv
         .
         getBytes
         (
         )
         )
         ; cipher
         .
         init
         (
         Cipher
         .DECRYPT_MODE
         , keyspec
         , ivspec
         )
         ; 
         byte
         [
         ] original 
         = cipher
         .
         doFinal
         (encrypted1
         )
         ; 
         String originalString 
         = 
         new 
         String
         (original
         )
         ; 
         return originalString
         .
         trim
         (
         )
         ; 
         } 
         catch 
         (
         Exception e
         ) 
         { 
           e
         .
         printStackTrace
         (
         )
         ; 
         return 
         null
         ; 
         } 
         } 
         } 
        

标签: kbh智能压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司