在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

微信小程序用戶數據解密(收藏)

微信小程序用戶數據解密(收藏)

更新時間:2025-10-08 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
這篇文章主要介紹了微信小程序 用戶數據解密詳細介紹的相關資料,需要的朋友可以參考下

微信小程序 用戶數據解密

官方指引圖:

微信小程序用戶數據解密(收藏)

引導圖一步一步操作

1、獲取code


onLoad: function (options) {
  // 頁面初始化 options為頁面跳轉所帶來的參數
  let that = this
  wx.login({
   success: function (res) {
    // success
    let code = res.code
    that.setData({ code: code })
    wx.getUserInfo({
     success: function (res) {
      // success
      that.setData({ userInfo: res.userInfo })
      that.setData({ iv: res.iv })
      that.setData({ encryptedData: res.encryptedData })
      that.get3rdSession()
     }
    })
   }
 })
}

2、發送code到第三方服務器,獲取3rd_session


get3rdSession:function(){
  let that = this
  wx.request({
   url: 'https://localhost:8443/get3rdSession',
   data: {
    code: this.data.code
   },
   method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
   // header: {}, // 設置請求的 header
   success: function (res) {
    // success
    var sessionId = res.data.session;
    that.setData({ sessionId: sessionId })
    wx.setStorageSync('sessionId', sessionId)
    that.decodeUserInfo()
   }
  })
 }

3、在第三方服務器上發送appid、appsecret、code到微信服務器換取session_key和openid

這里使用JFinal搭建的服務器

Redis配置


public void configPlugin(Plugins me) {
  //用于緩存userinfo模塊的redis服務
  RedisPlugin userInfoRedis = new RedisPlugin("userInfo","localhost");
  me.add(userInfoRedis);
}

獲取第三方session


public void get3rdSession() {
  //獲取名為userInfo的Redis Cache對象
  Cache userInfoCache = Redis.use("userInfo");
  String sessionId = "";
  JSONObject json = new JSONObject();
  String code = getPara("code");
  String url = "https://api.weixin.qq.com/sns/jscode2session?appid=wx7560b8008e2c445d&secret=f1af3312b7038513fd17dd9cbc3b357c&js_code=" + code + "&grant_type=authorization_code";
  //執行命令生成3rd_session
  String session = ExecLinuxCMDUtil.instance.exec("cat /dev/urandom |od -x | tr -d ' '| head -n 1").toString();
  json.put("session", session);
  //創建默認的httpClient實例
  CloseableHttpClient httpClient = getHttpClient();
  try {
    //用get方法發送http請求
    HttpGet get = new HttpGet(url);
    System.out.println("執行get請求:...." + get.getURI());
    CloseableHttpResponse httpResponse = null;
    //發送get請求
    httpResponse = httpClient.execute(get);
    try {
      //response實體
      HttpEntity entity = httpResponse.getEntity();
      if (null != entity) {
        String result = EntityUtils.toString(entity);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        String session_key = resultJson.getString("session_key");
        String openid = resultJson.getString("openid");
        //session存儲
        userInfoCache.set(session,session_key+","+openid);
        }
      } finally {
        httpResponse.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        closeHttpClient(httpClient);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    renderJson(json);
}
private CloseableHttpClient getHttpClient() {
  return HttpClients.createDefault();
}

private void closeHttpClient(CloseableHttpClient client) throws IOException {
  if (client != null) {
    client.close();
  }
}

ExecLinuxCMDUtil.Java


import java.io.InputStreamReader;
import java.io.LineNumberReader;

/**
 * java在linux環境下執行linux命令,然后返回命令返回值。
 * Created by LJaer on 16/12/22.
 */
public class ExecLinuxCMDUtil {
  public static final ExecLinuxCMDUtil instance = new ExecLinuxCMDUtil();

  public static Object exec(String cmd) {
    try {
      String[] cmdA = { "/bin/sh", "-c", cmd };
      Process process = Runtime.getRuntime().exec(cmdA);
      LineNumberReader br = new LineNumberReader(new InputStreamReader(
          process.getInputStream()));
      StringBuffer sb = new StringBuffer();
      String line;
      while ((line = br.readLine()) != null) {
        System.out.println(line);
        sb.append(line).append("\n");
      }
      return sb.toString();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
}

4、解密用戶數據


decodeUserInfo:function(){
  let that = this
  wx.request({
   url: 'https://localhost:8443/decodeUserInfo',
   data: {
    encryptedData: that.data.encryptedData,
    iv: that.data.iv,
    session: wx.getStorageSync('sessionId')
   },
   method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
   // header: {}, // 設置請求的 header
   success: function (res) {
    // success
    console.log(res)
   }
  })
}

console輸出結果:

微信小程序用戶數據解密(收藏)

后端解密代碼


/**
 * 解密用戶敏感數據
 */
public void decodeUserInfo(){
  String encryptedData = getPara("encryptedData");
  String iv = getPara("iv");
  String session = getPara("session");
  //從緩存中獲取session_key
  //獲取名稱為userInfo的Redis Cache對象
  Cache userInfoRedis = Redis.use("userInfo");
  Object wxSessionObj = userInfoRedis.get(session);
  if(null==wxSessionObj){
    renderNull();
  }
  String wxSessionStr = (String)wxSessionObj;
  String session_key = wxSessionStr.split(",")[0];


  try {
    byte[] resultByte = AESUtil.instance.decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(session_key), Base64.decodeBase64(iv));
    if(null != resultByte && resultByte.length > 0){
      String userInfo = new String(resultByte, "UTF-8");
      System.out.println(userInfo);
      JSONObject json = JSONObject.fromObject(userInfo); //將字符串{“id”:1}
      renderJson(json);
    }
  } catch (InvalidAlgorithmParameterException e) {
    e.printStackTrace();
  } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
  }
}

AESUtil.java


import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;

public class AESUtil {
  public static final AESUtil instance = new AESUtil();

  public static boolean initialized = false;

  /**
   * AES解密
   * @param content 密文
   * @return
   * @throws InvalidAlgorithmParameterException
   * @throws NoSuchProviderException
   */
  public byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
    initialize();
    try {
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
      Key sKeySpec = new SecretKeySpec(keyByte, "AES");

      cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
      byte[] result = cipher.doFinal(content);
      return result;
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (NoSuchPaddingException e) {
      e.printStackTrace();
    } catch (InvalidKeyException e) {
      e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
      e.printStackTrace();
    } catch (BadPaddingException e) {
      e.printStackTrace();
    } catch (NoSuchProviderException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }

  public static void initialize(){
    if (initialized) return;
    Security.addProvider(new BouncyCastleProvider());
    initialized = true;
  }
  //生成iv
  public static AlgorithmParameters generateIV(byte[] iv) throws Exception{
    AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
    params.init(new IvParameterSpec(iv));
    return params;
  }
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

以上就是微信小程序用戶數據解密(收藏)的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 欧洲xxxxx| 日韩成人三级视频| 欧美精品99久久| 糖心vlog在线免费观看| 国产成人三级视频| 伊人再见免费在线观看高清版| 男生操女生视频在线观看| 欧美日韩一区二区三区69堂| wwwwwxxxx日本| 欧美日韩在线免费观看视频| 午夜啪啪福利视频| 日韩精品在线观看av| 777精品久无码人妻蜜桃| 免费毛片小视频| 天天色综合社区| 女女同性女同一区二区三区按摩| 糖心vlog在线免费观看| 九九热只有这里有精品| 日本三级免费观看| 最新国产黄色网址| 99热这里只有精品7| 97在线国产视频| 日本男人操女人| 蜜桃视频成人在线观看| jizzjizz国产精品喷水| 免费涩涩18网站入口| 异国色恋浪漫潭| 18禁男女爽爽爽午夜网站免费| 国产日韩成人内射视频| 日本在线视频www色| 精品国产免费av| 9999在线观看| 欧美精品第三页| 屁屁影院ccyy国产第一页| 亚洲中文字幕无码中文字| 成年人网站av| 两根大肉大捧一进一出好爽视频| 不用播放器的免费av| 91好吊色国产欧美日韩在线| 一级黄色片在线免费观看| 国产视频一视频二| 欧美a级黄色大片| 蜜臀av免费观看| 久久久亚洲精品无码| 亚洲一二区在线观看| 乱子伦视频在线看| 精品视频在线观看一区| 午夜在线视频免费观看| 一区二区三区免费播放| 欧美视频在线播放一区| 精品一区二区三区毛片| 中文字幕国产免费| 婷婷激情四射五月天| 欧美激情国产精品日韩| 成人免费播放器| 欧美大黑帍在线播放| 天天干天天色天天爽| 日韩av福利在线观看| 鲁一鲁一鲁一鲁一av| 午夜国产一区二区三区| 能在线观看的av网站| 日本久久久精品视频| 国产视频一视频二| 无罩大乳的熟妇正在播放| 日韩在线观看a| 久久久性生活视频| 国产一区二区视频播放| 性欧美大战久久久久久久| 99国产精品白浆在线观看免费| 中国老女人av| 少妇大叫太大太粗太爽了a片小说| 久久6免费视频| 美女在线免费视频| 妞干网在线播放| 成人免费在线小视频| 各处沟厕大尺度偷拍女厕嘘嘘| 人人妻人人添人人爽欧美一区| 国产精品无码一区二区在线| 国产中文字幕免费观看| 爆乳熟妇一区二区三区霸乳| 美女网站免费观看视频| 国产乱叫456| 丝袜人妻一区二区三区| 熟女性饥渴一区二区三区| 日本免费观看网站| 久久av秘一区二区三区| 久艹在线免费观看| 天天影视综合色| 午夜久久久久久久久久久| 黄色免费观看视频网站| 亚洲欧美国产日韩综合| 懂色av粉嫩av蜜臀av| 北条麻妃69av| 亚洲综合激情视频| av女优在线播放| 亚洲精品性视频| 国产在线播放观看| 99九九99九九九99九他书对| 欧美图片激情小说| 亚洲欧美国产日韩综合| 国产无限制自拍| 国内自拍第二页| 欧美极品欧美精品欧美图片| 亚洲最新免费视频| www.xxx亚洲| a级黄色一级片| 最新视频 - x88av| 污视频网址在线观看| 久操网在线观看| 久久久无码中文字幕久...| 日本女优爱爱视频| 日本丰满少妇xxxx| 国产精品88久久久久久妇女| 三级在线免费看| 欧美日韩在线中文| 国产免费黄色一级片| 青青草免费在线视频观看| 杨幂毛片午夜性生毛片 | 日本aa在线观看| 日韩成人av免费| 亚洲xxxx2d动漫1| 黄色片一级视频| www.日本少妇| 无码av天堂一区二区三区| 中文字幕在线乱| 亚洲 欧洲 日韩| 亚洲综合激情五月| 交换做爰国语对白| 国产在线视频三区| 国产精品av免费| 婷婷视频在线播放| 午夜视频在线观| 欧美视频亚洲图片| 欧洲美女亚洲激情| 五月天国产视频| 天天干天天色天天爽| 欧美 国产 精品| 天天做天天躁天天躁| 国产中文字幕乱人伦在线观看| 17c丨国产丨精品视频| www.国产二区| 欧美一区二区三区爽大粗免费| 欧美大片在线播放| 国产天堂在线播放| 欧美成人福利在线观看| 久久久福利影院| 老司机激情视频| 人妻少妇被粗大爽9797pw| 久久综合久久色| 亚洲第一天堂久久| 久久这里只有精品8| 一本大道熟女人妻中文字幕在线| 欧美激情国产精品日韩| 国产精品一区二区小说| 波多野结衣激情| 欧美精品一区二区三区三州| 亚洲色图38p| 特级西西444| 国产午夜福利视频在线观看| 亚洲欧美国产日韩综合| 8x8ⅹ国产精品一区二区二区| 精品无码一区二区三区在线| 牛夜精品久久久久久久| 佐佐木明希av| av动漫免费看| 免费的av在线| 爆乳熟妇一区二区三区霸乳| 欧美精品色视频| 亚洲精品乱码久久久久久自慰| 毛片毛片毛片毛| 日韩精品视频久久| av片在线免费| 亚洲色图欧美自拍| 91蝌蚪视频在线观看| 蜜臀精品一区二区| 污网站在线免费| 精品视频一区二区在线| 国产欧美精品aaaaaa片| 色呦色呦色精品| 天堂中文视频在线| 凹凸国产熟女精品视频| 男人添女人下部视频免费| 日本中文字幕观看| av天堂永久资源网| 欧美一级爱爱视频| 欧美又黄又嫩大片a级| 香蕉视频网站入口| 欧美精品第三页| 日本丰满少妇xxxx| 中文字幕无码精品亚洲资源网久久| 日韩av片专区| 国产一区二区在线观看免费视频| 成年人观看网站| 男人的天堂99| 97国产在线播放| 18禁免费观看网站| 欧美精品99久久| 5月婷婷6月丁香| 少妇人妻互换不带套| 亚洲国产精品久久久久爰色欲|