|
@@ -0,0 +1,199 @@
|
|
|
|
+package com.simuwang.base.common.util;
|
|
|
|
+
|
|
|
|
+import javax.crypto.*;
|
|
|
|
+import javax.crypto.spec.DESKeySpec;
|
|
|
|
+import javax.crypto.spec.SecretKeySpec;
|
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
|
+import java.net.URLDecoder;
|
|
|
|
+import java.net.URLEncoder;
|
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
|
+import java.security.InvalidKeyException;
|
|
|
|
+import java.security.MessageDigest;
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
|
+import java.security.SecureRandom;
|
|
|
|
+import java.util.Base64;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * TODO
|
|
|
|
+ *
|
|
|
|
+ * @author chenjianhua
|
|
|
|
+ * @version 1.0
|
|
|
|
+ * @date 2022/7/31 23:35
|
|
|
|
+ */
|
|
|
|
+public class EncodeUtil {
|
|
|
|
+ private EncodeUtil() {
|
|
|
|
+ throw new Error("该类不能被实例化!");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static Cipher makeCipher() throws Exception {
|
|
|
|
+ return Cipher.getInstance("DES");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static SecretKey makeKeyFactory(String sKey) {
|
|
|
|
+ SecretKey secretKey = null;
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ SecretKeyFactory des = SecretKeyFactory.getInstance("DES");
|
|
|
|
+ secretKey = des.generateSecret(new DESKeySpec(sKey.getBytes()));
|
|
|
|
+ return secretKey;
|
|
|
|
+ } catch (Exception var3) {
|
|
|
|
+ var3.printStackTrace();
|
|
|
|
+ return secretKey;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String encrypt(String key, String text) {
|
|
|
|
+ try {
|
|
|
|
+ Cipher cipher = makeCipher();
|
|
|
|
+ SecretKey secretKey = makeKeyFactory(key);
|
|
|
|
+ cipher.init(1, secretKey);
|
|
|
|
+ return new String(Base64.getEncoder().encode(cipher.doFinal(text.getBytes())));
|
|
|
|
+ } catch (Exception var4) {
|
|
|
|
+ var4.printStackTrace();
|
|
|
|
+ return text;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String decrypt(String key, String text) {
|
|
|
|
+ try {
|
|
|
|
+ Cipher cipher = makeCipher();
|
|
|
|
+ SecretKey secretKey = makeKeyFactory(key);
|
|
|
|
+ cipher.init(2, secretKey);
|
|
|
|
+ return new String(cipher.doFinal(Base64.getDecoder().decode(text.getBytes())));
|
|
|
|
+ } catch (Exception var4) {
|
|
|
|
+ var4.printStackTrace();
|
|
|
|
+ return text;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static final String md5(String s) {
|
|
|
|
+ char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ byte[] strTemp = s.getBytes();
|
|
|
|
+ MessageDigest mdTemp = MessageDigest.getInstance("MD5");
|
|
|
|
+ mdTemp.update(strTemp);
|
|
|
|
+ byte[] md = mdTemp.digest();
|
|
|
|
+ int j = md.length;
|
|
|
|
+ char[] str = new char[j * 2];
|
|
|
|
+ int k = 0;
|
|
|
|
+
|
|
|
|
+ for(int i = 0; i < j; ++i) {
|
|
|
|
+ byte byte0 = md[i];
|
|
|
|
+ str[k++] = hexDigits[byte0 >>> 4 & 15];
|
|
|
|
+ str[k++] = hexDigits[byte0 & 15];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new String(str);
|
|
|
|
+ } catch (Exception var10) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String encodeUTF8(String source) {
|
|
|
|
+ String result = source;
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ result = URLEncoder.encode(source, StandardCharsets.UTF_8.name());
|
|
|
|
+ result = result.replace("+", "%20");
|
|
|
|
+ } catch (UnsupportedEncodingException var3) {
|
|
|
|
+ var3.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String decodeUTF8(String source) {
|
|
|
|
+ String result = source;
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ result = URLDecoder.decode(source, StandardCharsets.UTF_8.name());
|
|
|
|
+ } catch (UnsupportedEncodingException var3) {
|
|
|
|
+ var3.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String AESEncrypt(String content, String key) {
|
|
|
|
+ try {
|
|
|
|
+ KeyGenerator kgen = KeyGenerator.getInstance("AES");
|
|
|
|
+ SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
|
|
|
|
+ random.setSeed(key.getBytes());
|
|
|
|
+ kgen.init(128, random);
|
|
|
|
+ SecretKey secretKey = kgen.generateKey();
|
|
|
|
+ byte[] enCodeFormat = secretKey.getEncoded();
|
|
|
|
+ SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
|
|
|
|
+ Cipher cipher = Cipher.getInstance("AES");
|
|
|
|
+ byte[] byteContent = content.getBytes("utf-8");
|
|
|
|
+ cipher.init(1, secretKeySpec);
|
|
|
|
+ byte[] byteRresult = cipher.doFinal(byteContent);
|
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
|
+
|
|
|
|
+ for(int i = 0; i < byteRresult.length; ++i) {
|
|
|
|
+ String hex = Integer.toHexString(byteRresult[i] & 255);
|
|
|
|
+ if (hex.length() == 1) {
|
|
|
|
+ hex = '0' + hex;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sb.append(hex.toUpperCase());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return sb.toString();
|
|
|
|
+ } catch (NoSuchAlgorithmException var13) {
|
|
|
|
+ var13.printStackTrace();
|
|
|
|
+ } catch (NoSuchPaddingException var14) {
|
|
|
|
+ var14.printStackTrace();
|
|
|
|
+ } catch (InvalidKeyException var15) {
|
|
|
|
+ var15.printStackTrace();
|
|
|
|
+ } catch (UnsupportedEncodingException var16) {
|
|
|
|
+ var16.printStackTrace();
|
|
|
|
+ } catch (IllegalBlockSizeException var17) {
|
|
|
|
+ var17.printStackTrace();
|
|
|
|
+ } catch (BadPaddingException var18) {
|
|
|
|
+ var18.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String AESDecrypt(String content, String key) {
|
|
|
|
+ if (content.length() < 1) {
|
|
|
|
+ return null;
|
|
|
|
+ } else {
|
|
|
|
+ byte[] byteRresult = new byte[content.length() / 2];
|
|
|
|
+
|
|
|
|
+ for(int i = 0; i < content.length() / 2; ++i) {
|
|
|
|
+ int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
|
|
|
|
+ int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
|
|
|
|
+ byteRresult[i] = (byte)(high * 16 + low);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ KeyGenerator kgen = KeyGenerator.getInstance("AES");
|
|
|
|
+ SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
|
|
|
|
+ random.setSeed(key.getBytes());
|
|
|
|
+ kgen.init(128, random);
|
|
|
|
+ SecretKey secretKey = kgen.generateKey();
|
|
|
|
+ byte[] enCodeFormat = secretKey.getEncoded();
|
|
|
|
+ SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
|
|
|
|
+ Cipher cipher = Cipher.getInstance("AES");
|
|
|
|
+ cipher.init(2, secretKeySpec);
|
|
|
|
+ byte[] result = cipher.doFinal(byteRresult);
|
|
|
|
+ return new String(result);
|
|
|
|
+ } catch (NoSuchAlgorithmException var10) {
|
|
|
|
+ var10.printStackTrace();
|
|
|
|
+ } catch (NoSuchPaddingException var11) {
|
|
|
|
+ var11.printStackTrace();
|
|
|
|
+ } catch (InvalidKeyException var12) {
|
|
|
|
+ var12.printStackTrace();
|
|
|
|
+ } catch (IllegalBlockSizeException var13) {
|
|
|
|
+ var13.printStackTrace();
|
|
|
|
+ } catch (BadPaddingException var14) {
|
|
|
|
+ var14.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|