Java解密微信小程序手機(jī)號(hào)的方法
本文實(shí)例為大家分享了Java解密微信小程序手機(jī)號(hào)的具體代碼,供大家參考,具體內(nèi)容如下
第一步:創(chuàng)建AES解密工具類:代碼如下
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Key;
import java.security.Security;
public class AES {
// 算法名
public static final String KEY_NAME = "AES";
// 加解密算法/模式/填充方式
// ECB模式只用密鑰即可對(duì)數(shù)據(jù)進(jìn)行加密解密,CBC模式需要添加一個(gè)iv
public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";
/**
* 微信 數(shù)據(jù)解密<br/>
* 對(duì)稱解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充<br/>
* 對(duì)稱解密的目標(biāo)密文:encrypted=Base64_Decode(encryptData)<br/>
* 對(duì)稱解密秘鑰:key = Base64_Decode(session_key),aeskey是16字節(jié)<br/>
* 對(duì)稱解密算法初始向量:iv = Base64_Decode(iv),同樣是16字節(jié)<br/>
*
* @param encrypted 目標(biāo)密文
* @param session_key 會(huì)話ID
* @param iv 加密算法的初始向量
*/
public static String wxDecrypt(String encrypted, String session_key, String iv) {
String json = null;
byte[] encrypted64 = Base64.decodeBase64(encrypted);
byte[] key64 = Base64.decodeBase64(session_key);
byte[] iv64 = Base64.decodeBase64(iv);
byte[] data;
try {
init();
json = new String(decrypt(encrypted64, key64, generateIV(iv64)));
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
/**
* 初始化密鑰
*/
public static void init() throws Exception {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
KeyGenerator.getInstance(KEY_NAME).init(128);
}
/**
* 生成iv
*/
public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
// iv 為一個(gè) 16 字節(jié)的數(shù)組,這里采用和 iOS 端一樣的構(gòu)造方法,數(shù)據(jù)全為0
// Arrays.fill(iv, (byte) 0x00);
AlgorithmParameters params = AlgorithmParameters.getInstance(KEY_NAME);
params.init(new IvParameterSpec(iv));
return params;
}
/**
* 生成解密
*/
public static byte[] decrypt(byte[] encryptedData, byte[] keyBytes, AlgorithmParameters iv)
throws Exception {
Key key = new SecretKeySpec(keyBytes, KEY_NAME);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 設(shè)置為解密模式
cipher.init(Cipher.DECRYPT_MODE, key, iv);
return cipher.doFinal(encryptedData);
}
}
第二步:接口調(diào)用
接收參數(shù): encrypted session_key iv
public String decodeUserInfo(String encrypted, String session_key, String iv) throws IOException {
String json = wxDecrypt(encrypted, session_key, iv);
System.out.println(json);
return json;
}
官方文檔:鏈接地址
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot集成redis實(shí)現(xiàn)簡單秒殺系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了springboot集成redis實(shí)現(xiàn)簡單秒殺系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Java synchronized線程交替運(yùn)行實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Java synchronized線程交替運(yùn)行實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
java動(dòng)態(tài)線程池的簡單實(shí)現(xiàn)思路
本文主要介紹了java?動(dòng)態(tài)線程池的簡單實(shí)現(xiàn)思路,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
深入淺出講解Spring框架中依賴注入與控制反轉(zhuǎn)及應(yīng)用
依賴注入(Dependency?Injection)和控制反轉(zhuǎn)(Inversion?of?Control)是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在?傳統(tǒng)的程序設(shè)計(jì)過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例2022-03-03
SpringMVC MVC架構(gòu)原理及實(shí)現(xiàn)方法詳解
這篇文章主要介紹了SpringMVC MVC架構(gòu)原理及實(shí)現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java int與integer的對(duì)比區(qū)別
這篇文章主要介紹了Java int與integer的對(duì)比區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-01-01
Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法
這篇文章主要介紹了Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-05-05
Springboot 使用 maven-resources-plugin 打包變量替換ja
這篇文章主要介紹了Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進(jìn)去、Jar包沒有被使用的解決方法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-08-08

