国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 九龙城区| 蕲春县| 邵武市| 邛崃市| 台江县| 凉城县| 甘谷县| 赣州市| 房产| 苏尼特右旗| 夏津县| 千阳县| 磴口县| 铁力市| 大余县| 贵溪市| 东光县| 肃宁县| 改则县| 连州市| 龙南县| 南昌市| 巴彦淖尔市| 武汉市| 南京市| 年辖:市辖区| 唐海县| 黄冈市| 伊春市| 连江县| 会宁县| 玉屏| 安义县| 神池县| 故城县| 香河县| 靖宇县| 越西县| 府谷县| 清水河县| 仁怀市|