| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- package com.template.common.utils;
- import lombok.extern.slf4j.Slf4j;
- import org.bouncycastle.util.encoders.Base64;
- import javax.crypto.BadPaddingException;
- import javax.crypto.Cipher;
- import javax.crypto.IllegalBlockSizeException;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.spec.SecretKeySpec;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- /**
- * @Author: liujun
- * @Description: Aes 加解密算法
- * @Date Create in 上午 9:38$ 2017/12/26 0026$
- * @Modify By:
- */
- @Slf4j
- public class AesUtils {
- private static String password = "52D04DC20036DBD8";
- /**
- * @Author liujun
- * @Description:
- * @params: * @param content 需要加密的内容
- * @param password 加密密码
- * @Date 上午 9:41 2017/12/26 0026
- */
- public static String encrypt(String content) {
- if(password.length()<16) {
- password = password + "0000000000000000".substring(0, 16-password.length());
- }
- else if(password.length()>16) {
- password = password.substring(0, 16);
- }
- return bytes2HexString(encryptAES(content.getBytes(), password.getBytes()));
- }
- /**
- * @Author liujun
- * @Description:
- * @params: * @param content 待解密内容
- * @param password 解密密钥
- * @Date 上午 9:40 2017/12/26 0026
- */
- public static String decrypt(String content) {
- if(password.length()<16) {
- password = password + "0000000000000000".substring(0, 16-password.length());
- }
- else if(password.length()>16) {
- password = password.substring(0, 16);
- }
- return new String(decryptAES(hexString2Bytes(content), password.getBytes()));
- }
- /**
- * AES 加密
- *
- * @param data 明文
- * @param key 16、24、32 字节秘钥
- * @return 密文
- */
- public static byte[] encryptAES(final byte[] data, final byte[] key) {
- try {
- SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 创建密码器
- byte[] byteContent = data;
- cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);// 初始化
- byte[] result = cipher.doFinal(byteContent);
- return result; // 加密
- } catch (NoSuchAlgorithmException e) {
- log.error(e.getMessage(),e);
- } catch (NoSuchPaddingException e) {
- log.error(e.getMessage(),e);
- } catch (InvalidKeyException e) {
- log.error(e.getMessage(),e);
- } catch (IllegalBlockSizeException e) {
- log.error(e.getMessage(),e);
- } catch (BadPaddingException e) {
- log.error(e.getMessage(),e);
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- }
- return null;
- }
- /**
- * AES 解密
- *
- * @param data 密文
- * @param key 16、24、32 字节秘钥
- * @return 明文
- */
- public static byte[] decryptAES(final byte[] data, final byte[] key) {
- try {
- SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 创建密码器
- cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);// 初始化
- byte[] result = cipher.doFinal(data);
- return result; // 加密
- } catch (NoSuchAlgorithmException e) {
- log.error(e.getMessage(),e);
- } catch (NoSuchPaddingException e) {
- log.error(e.getMessage(),e);
- } catch (InvalidKeyException e) {
- log.error(e.getMessage(),e);
- } catch (IllegalBlockSizeException e) {
- log.error(e.getMessage(),e);
- } catch (BadPaddingException e) {
- log.error(e.getMessage(),e);
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- }
- return null;
- }
- public static String bytes2HexString(final byte[] bytes) {
- if (bytes == null) return null;
- int len = bytes.length;
- if (len <= 0) return null;
- char[] ret = new char[len << 1];
- for (int i = 0, j = 0; i < len; i++) {
- ret[j++] = hexDigits[bytes[i] >>> 4 & 0x0f];
- ret[j++] = hexDigits[bytes[i] & 0x0f];
- }
- return new String(ret);
- }
- private static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
- public static byte[] hexString2Bytes(String hexString) {
- if (isSpace(hexString)) return null;
- int len = hexString.length();
- if (len % 2 != 0) {
- hexString = "0" + hexString;
- len = len + 1;
- }
- char[] hexBytes = hexString.toUpperCase().toCharArray();
- byte[] ret = new byte[len >> 1];
- for (int i = 0; i < len; i += 2) {
- ret[i >> 1] = (byte) (hex2Dec(hexBytes[i]) << 4 | hex2Dec(hexBytes[i + 1]));
- }
- return ret;
- }
- private static int hex2Dec(final char hexChar) {
- if (hexChar >= '0' && hexChar <= '9') {
- return hexChar - '0';
- } else if (hexChar >= 'A' && hexChar <= 'F') {
- return hexChar - 'A' + 10;
- } else {
- throw new IllegalArgumentException();
- }
- }
- public static byte[] base64Encode(final byte[] input) {
- return Base64.encode(input);
- }
- public static byte[] base64Decode(final byte[] input) {
- return Base64.decode(input);
- }
- private static boolean isSpace(final String s) {
- if (s == null) return true;
- for (int i = 0, len = s.length(); i < len; ++i) {
- if (!Character.isWhitespace(s.charAt(i))) {
- return false;
- }
- }
- return true;
- }
- public static void main(String[] args) {
- String s="{\n" +
- " \"categoryId\": \"72cf28a8789643bbbbb62d08ee91f17e\",\n" +
- " \"luid\": \"80A036D93CFB\",\n" +
- " \"type\":\"4\",\n" +
- " \"userName\":\"13097286670\",\n" +
- " \"startTime\":\"1682389484000\",\n" +
- " \"endTime\":\"1684981484000\",\n" +
- " \"password\":\"A08E87B5E777EBEE2C6EF3262F069D5A\"\n" +
- "}";
- //加密
- String encryptString = AesUtils.encrypt("548903");
- logger.info("加密后字符串:"+encryptString);
- //解密
- String decryptString = AesUtils.decrypt(encryptString);
- logger.info("解密后字符串:"+decryptString);
- }
- }
|