zoukankan      html  css  js  c++  java
  • 使用AES128加密字符串

      1 import lombok.extern.slf4j.Slf4j;
      2 import org.apache.commons.codec.binary.Base64;
      3 import org.apache.commons.lang3.StringUtils;
      4 
      5 import javax.crypto.Cipher;
      6 import javax.crypto.KeyGenerator;
      7 import javax.crypto.SecretKey;
      8 import java.security.SecureRandom;
      9 
     10 /**
     11  * 字符串AES128加密 <加盐>
     12  *
     13  * @author XuBaofeng.
     14  * @date 2018-10-11 18:55.
     15  */
     16 @Slf4j
     17 public class Aes128Util {
     18 
     19     private static final String KEY_ALGORITHM = "AES";
     20     private static final String SHA1_PRNG = "SHA1PRNG";
     21     /*** 字符编码 ***/
     22     private static final String CHARACTER_CODING = "UTF-8";
     23     /*** 默认的加密算法 ***/
     24     private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
     25     /*** 默认的盐 ***/
     26     private static final String DEFAULT_SECRET_KEY = "yanwu0527@163.com";
     27 
     28     /**
     29      * AES 加密操作, 使用默认盐
     30      *
     31      * @param content 待加密内容
     32      * @return 返回Base64转码后的加密数据
     33      */
     34     public static String encrypt(String content) {
     35         return encrypt(content, DEFAULT_SECRET_KEY);
     36     }
     37 
     38     /**
     39      * AES 加密操作, 自定义盐
     40      *
     41      * @param content 待加密内容
     42      * @param key     秘钥
     43      * @return 返回Base64转码后的加密数据
     44      */
     45     public static String encrypt(String content, String key) {
     46         if (StringUtils.isBlank(content)) {
     47             return content;
     48         }
     49         if (StringUtils.isBlank(key)) {
     50             key = DEFAULT_SECRET_KEY;
     51         }
     52         try {
     53             Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
     54             byte[] byteContent = content.getBytes(CHARACTER_CODING);
     55             cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key));
     56             byte[] result = cipher.doFinal(byteContent);
     57             return Base64.encodeBase64String(result);
     58         } catch (Exception e) {
     59             log.error("String: [{}] Aes128Util encryption error.", content, e);
     60         }
     61         return null;
     62     }
     63 
     64     /**
     65      * AES 解密操作, 使用默认盐
     66      *
     67      * @param content 待解密内容
     68      * @return 解密数据
     69      */
     70     public static String decrypt(String content) {
     71         return decrypt(content, DEFAULT_SECRET_KEY);
     72     }
     73 
     74     /**
     75      * AES 解密操作, 自定义盐
     76      *
     77      * @param content 待解密内容
     78      * @param key     秘钥
     79      * @return 解密数据
     80      */
     81     public static String decrypt(String content, String key) {
     82         if (StringUtils.isBlank(content)) {
     83             return content;
     84         }
     85         if (StringUtils.isBlank(key)) {
     86             key = DEFAULT_SECRET_KEY;
     87         }
     88         try {
     89             Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
     90             cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key));
     91             byte[] result = cipher.doFinal(Base64.decodeBase64(content));
     92             return new String(result, CHARACTER_CODING);
     93         } catch (Exception e) {
     94             log.error("String: [{}] Aes128Util decryption error.", content, e);
     95         }
     96         return null;
     97     }
     98 
     99     /**
    100      * 生成加密秘钥
    101      *
    102      * @return
    103      */
    104     private static SecretKey getSecretKey(String key) throws Exception {
    105         SecureRandom secureRandom = SecureRandom.getInstance(SHA1_PRNG);
    106         secureRandom.setSeed(key.getBytes());
    107         KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
    108         kg.init(secureRandom);
    109         return kg.generateKey();
    110     }
    111 
    112 }
  • 相关阅读:
    uva1610 Party Games
    uva1442 Cav
    uva1609 Foul Play
    uva1608 Non-boring sequences
    uva12174 滑动窗口+预处理
    uva 1451 数形结合
    light oj 1336 sigma function
    找常用词(字符串处理)问题
    指定排序问题
    完数问题
  • 原文地址:https://www.cnblogs.com/yanwu0527/p/9774550.html
Copyright © 2011-2022 走看看