Java解密微信小程序手机号的方法
本文实例为大家分享了Java解密微信小程序手机号的具体代码,供大家参考,具体内容如下
第一步:创建AES解密工具类:代码如下
importorg.apache.commons.codec.binary.Base64;
importjavax.crypto.Cipher;
importjavax.crypto.KeyGenerator;
importjavax.crypto.spec.IvParameterSpec;
importjavax.crypto.spec.SecretKeySpec;
importjava.security.AlgorithmParameters;
importjava.security.Key;
importjava.security.Security;
publicclassAES{
//算法名
publicstaticfinalStringKEY_NAME="AES";
//加解密算法/模式/填充方式
//ECB模式只用密钥即可对数据进行加密解密,CBC模式需要添加一个iv
publicstaticfinalStringCIPHER_ALGORITHM="AES/CBC/PKCS7Padding";
/**
*微信数据解密
*对称解密使用的算法为AES-128-CBC,数据采用PKCS#7填充
*对称解密的目标密文:encrypted=Base64_Decode(encryptData)
*对称解密秘钥:key=Base64_Decode(session_key),aeskey是16字节
*对称解密算法初始向量:iv=Base64_Decode(iv),同样是16字节
*
*@paramencrypted目标密文
*@paramsession_key会话ID
*@paramiv加密算法的初始向量
*/
publicstaticStringwxDecrypt(Stringencrypted,Stringsession_key,Stringiv){
Stringjson=null;
byte[]encrypted64=Base64.decodeBase64(encrypted);
byte[]key64=Base64.decodeBase64(session_key);
byte[]iv64=Base64.decodeBase64(iv);
byte[]data;
try{
init();
json=newString(decrypt(encrypted64,key64,generateIV(iv64)));
}catch(Exceptione){
e.printStackTrace();
}
returnjson;
}
/**
*初始化密钥
*/
publicstaticvoidinit()throwsException{
Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());
KeyGenerator.getInstance(KEY_NAME).init(128);
}
/**
*生成iv
*/
publicstaticAlgorithmParametersgenerateIV(byte[]iv)throwsException{
//iv为一个16字节的数组,这里采用和iOS端一样的构造方法,数据全为0
//Arrays.fill(iv,(byte)0x00);
AlgorithmParametersparams=AlgorithmParameters.getInstance(KEY_NAME);
params.init(newIvParameterSpec(iv));
returnparams;
}
/**
*生成解密
*/
publicstaticbyte[]decrypt(byte[]encryptedData,byte[]keyBytes,AlgorithmParametersiv)
throwsException{
Keykey=newSecretKeySpec(keyBytes,KEY_NAME);
Ciphercipher=Cipher.getInstance(CIPHER_ALGORITHM);
//设置为解密模式
cipher.init(Cipher.DECRYPT_MODE,key,iv);
returncipher.doFinal(encryptedData);
}
}
第二步:接口调用
接收参数:encrypted session_keyiv
publicStringdecodeUserInfo(Stringencrypted,Stringsession_key,Stringiv)throwsIOException{
Stringjson=wxDecrypt(encrypted,session_key,iv);
System.out.println(json);
returnjson;
}
官方文档:链接地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。