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; }
官方文档:链接地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。