|
@@ -0,0 +1,115 @@
|
|
|
+package com.gree.mall.manager.utils;
|
|
|
+
|
|
|
+import org.apache.commons.codec.DecoderException;
|
|
|
+import org.apache.commons.codec.binary.Base64;
|
|
|
+import org.apache.commons.codec.binary.Hex;
|
|
|
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
|
+
|
|
|
+import javax.crypto.*;
|
|
|
+import javax.crypto.spec.SecretKeySpec;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.security.*;
|
|
|
+
|
|
|
+public class CryptTool {
|
|
|
+ public CryptTool() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String byte2hex(byte[] b) {
|
|
|
+ StringBuffer stringBuffer = new StringBuffer();
|
|
|
+ String temp = null;
|
|
|
+
|
|
|
+ for(int i = 0; i < b.length; ++i) {
|
|
|
+ temp = Integer.toHexString(b[i] & 255);
|
|
|
+ if (temp.length() == 1) {
|
|
|
+ stringBuffer.append("0").append(temp);
|
|
|
+ } else {
|
|
|
+ stringBuffer.append(temp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return stringBuffer.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static byte[] decodeBase64(String key) {
|
|
|
+ return Base64.decodeBase64(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static SecretKeySpec initAESSecretKey(String secretKeySource) throws NoSuchAlgorithmException, DecoderException, UnsupportedEncodingException {
|
|
|
+ KeyGenerator keyGen = KeyGenerator.getInstance("AES");
|
|
|
+ SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
|
|
|
+ byte[] decodeHex = Hex.decodeHex(sha256(secretKeySource).toCharArray());
|
|
|
+ secureRandom.setSeed(decodeHex);
|
|
|
+ keyGen.init(128, secureRandom);
|
|
|
+ SecretKey secretKey = keyGen.generateKey();
|
|
|
+ byte[] secretKeyEncoded = secretKey.getEncoded();
|
|
|
+ SecretKeySpec key = new SecretKeySpec(secretKeyEncoded, "AES");
|
|
|
+ Security.addProvider(new BouncyCastleProvider());
|
|
|
+ return key;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String decryptAES(String source, String secretKey) {
|
|
|
+ try {
|
|
|
+ byte[] sourceBytes = decodeBase64(source);
|
|
|
+ SecretKeySpec secretKeySpec = initAESSecretKey(secretKey);
|
|
|
+ byte[] decryptBytes = decrypt(source.getBytes(), secretKeySpec);
|
|
|
+ return new String(decryptBytes, "utf8");
|
|
|
+ } catch (Exception var5) {
|
|
|
+ throw new RuntimeException("AES算法解密失败", var5);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static byte[] decrypt(byte[] source, SecretKeySpec secretKeySpec) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
|
|
|
+ Cipher cipher = Cipher.getInstance(secretKeySpec.getAlgorithm());
|
|
|
+ cipher.init(2, secretKeySpec);
|
|
|
+ return cipher.doFinal(source);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String digest(byte[] inputBytes, String algorithm) throws NoSuchAlgorithmException {
|
|
|
+ String outputStr = null;
|
|
|
+ MessageDigest alg = MessageDigest.getInstance(algorithm);
|
|
|
+ alg.update(inputBytes);
|
|
|
+ byte[] digest = alg.digest();
|
|
|
+ outputStr = byte2hex(digest);
|
|
|
+ return outputStr.toUpperCase();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String sha1(String inStr) throws UnsupportedEncodingException, NoSuchAlgorithmException {
|
|
|
+ String outStr = digest(inStr.getBytes("UTF-8"), "SHA-1");
|
|
|
+ return outStr;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String sha256(String inStr) throws UnsupportedEncodingException, NoSuchAlgorithmException {
|
|
|
+ String outStr = digest(inStr.getBytes("UTF-8"), "SHA-256");
|
|
|
+ return outStr;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String md5(String inStr) throws UnsupportedEncodingException, NoSuchAlgorithmException {
|
|
|
+ String outStr = digest(inStr.getBytes("UTF-8"), "MD5");
|
|
|
+ return outStr;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String encryptBASE64(byte[] key) throws Exception {
|
|
|
+ return Base64.encodeBase64String(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String encryptAES(String source, String secretKey) {
|
|
|
+ try {
|
|
|
+ byte[] sourceBytes = source.getBytes("utf8");
|
|
|
+ SecretKeySpec secretKeySpec = initAESSecretKey(secretKey);
|
|
|
+ byte[] encryptBytes = encrypt(sourceBytes, secretKeySpec);
|
|
|
+ return Base64.encodeBase64URLSafeString(encryptBytes);
|
|
|
+ } catch (Exception var5) {
|
|
|
+ throw new RuntimeException("AES算法加密失败", var5);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static byte[] encrypt(byte[] source, SecretKeySpec secretKeySpec) throws BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException {
|
|
|
+ Cipher cipher = Cipher.getInstance(secretKeySpec.getAlgorithm());
|
|
|
+ cipher.init(1, secretKeySpec);
|
|
|
+ return cipher.doFinal(source);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String encodeBase64String(byte[] source) {
|
|
|
+ return Base64.encodeBase64String(source);
|
|
|
+ }
|
|
|
+}
|