国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

Java解密微信小程序手機號的方法

2024-07-14 08:43:15
字體:
供稿:網(wǎng)友

本文實例為大家分享了Java解密微信小程序手機號的具體代碼,供大家參考,具體內(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模式只用密鑰即可對數(shù)據(jù)進(jìn)行加密解密,CBC模式需要添加一個iv  public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";  /**   * 微信 數(shù)據(jù)解密<br/>   * 對稱解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充<br/>   * 對稱解密的目標(biāo)密文:encrypted=Base64_Decode(encryptData)<br/>   * 對稱解密秘鑰:key = Base64_Decode(session_key),aeskey是16字節(jié)<br/>   * 對稱解密算法初始向量:iv = Base64_Decode(iv),同樣是16字節(jié)<br/>   *   * @param encrypted 目標(biāo)密文   * @param session_key 會話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 為一個 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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临邑县| 洛阳市| 达日县| 福泉市| 白城市| 阳原县| 衡山县| 仁寿县| 宁海县| 镇原县| 上林县| 桐乡市| 伊春市| 西林县| 宝山区| 绥芬河市| 宁远县| 景泰县| 左云县| 同江市| 陵水| 绵竹市| 察雅县| 成武县| 进贤县| 清原| 徐闻县| 修水县| 增城市| 金秀| 乌鲁木齐县| 沾化县| 西畴县| 河西区| 洞口县| 淅川县| 屯留县| 织金县| 江西省| 普宁市| 米泉市|