위챗 애플릿 데이터 복호화
public static String decrypt(String encryptedData, String ivData, String code) {
try {
// , code sessionKey
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + WeChatConstant.APPID_SMALL_ROUTINE +
"&secret=" + WeChatConstant.SECRET_SMALL_ROUTINE + "&js_code=" + code + "&grant_type=authorization_code";
RestTemplate restTemplate = new RestTemplate();
// , url
ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
//
String sessionKey = "";
if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {
String sessionData = responseEntity.getBody();
// openid session_key;
JSONObject object = JSONObject.parseObject(sessionData.trim());
// Openid
sessionKey = object.getString("session_key");
System.out.println(sessionKey);
}
byte[] encrypData1 = Base64.decodeBase64(encryptedData);
byte[] ivData1 = Base64.decodeBase64(ivData);
byte[] sessionKey1 = Base64.decodeBase64(sessionKey);
int base = 16;
if (sessionKey1.length % base != 0) {
int groups = sessionKey1.length / base + (sessionKey1.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(sessionKey1, 0, temp, 0, sessionKey1.length);
sessionKey1 = temp;
}
//
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec spec = new SecretKeySpec(sessionKey1, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivData1));
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
//
byte[] resultByte = cipher.doFinal(encrypData1);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, "UTF-8");
System.out.println("*************************
" + result);
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
5가지 자바 정렬 알고리즘 집합 도구 클래스도구류는 자바의 빠른 정렬, 힐 정렬, 삽입 정렬, 더미 정렬, 병합 정렬 다섯 가지 정렬 알고리즘을 간단명료하게 정리했다. 코드에는 이 몇 가지 정렬 알고리즘에 대한 설명이 없다. 사상 부분은 자체적으로 관련 설명...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.