|
@@ -0,0 +1,55 @@
|
|
|
+package com.care.common.util;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+
|
|
|
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+
|
|
|
+import javax.crypto.Cipher;
|
|
|
+import javax.crypto.spec.IvParameterSpec;
|
|
|
+import javax.crypto.spec.SecretKeySpec;
|
|
|
+import java.security.AlgorithmParameters;
|
|
|
+
|
|
|
+import java.security.Security;
|
|
|
+import java.util.Base64;
|
|
|
+
|
|
|
+public class WxUtil {
|
|
|
+
|
|
|
+ public static String getPhoneNumber(String encryptedData, String session_key, String iv) {
|
|
|
+ // 被加密的数据
|
|
|
+ byte[] dataByte = Base64.getDecoder().decode(encryptedData);
|
|
|
+ // 加密秘钥
|
|
|
+ byte[] keyByte = Base64.getDecoder().decode(session_key);
|
|
|
+ // 偏移量
|
|
|
+ byte[] ivByte = Base64.getDecoder().decode(iv);
|
|
|
+ try {
|
|
|
+ // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
|
|
|
+ int base = 16;
|
|
|
+ if (keyByte.length % base != 0) {
|
|
|
+ int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
|
|
|
+ byte[] temp = new byte[groups * base];
|
|
|
+ Arrays.fill(temp, (byte) 0);
|
|
|
+ System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
|
|
|
+ keyByte = temp;
|
|
|
+ }
|
|
|
+ // 初始化
|
|
|
+ Security.addProvider(new BouncyCastleProvider());
|
|
|
+ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
|
+ SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
|
|
|
+ AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
|
|
|
+ parameters.init(new IvParameterSpec(ivByte));
|
|
|
+ cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
|
|
|
+ byte[] resultByte = cipher.doFinal(dataByte);
|
|
|
+ if (null != resultByte && resultByte.length > 0) {
|
|
|
+ String result = new String(resultByte, "UTF-8");
|
|
|
+ System.out.println(result);
|
|
|
+ //{"phoneNumber":"18800000000","watermark":{"appid":"wx2ba363fc4454f27c","timestamp":1586333901},"purePhoneNumber":"18800000000","countryCode":"86"}
|
|
|
+ return JSONObject.parseObject(result).getString("phoneNumber");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|