评论

使用JavaScript进行手机号解密

使用JavaScript进行手机号解密

对于手机号的解密,官方给出的都是后端解密,但是公司需要用js解密,记录一下。

首先需要下载cryptojs包,下载地址https://codeload.github.com/gwjjeff/cryptojs/zip/master

项目的utils目录下新建cryptojs目录,将下载的文件复制进去

在utils目录下新建RdWXBizDataCrypt.js文件,内容如下:

var Crypto = require('./cryptojs/cryptojs.js').Crypto;
function RdWXBizDataCrypt(appId, sessionKey{
    this.appId = appId
    this.sessionKey = sessionKey
}
RdWXBizDataCrypt.prototype.decryptData = function(encryptedData, iv{
    // base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码
    var encryptedData = Crypto.util.base64ToBytes(encryptedData)
    // console.log(sessionKey)
    var key = Crypto.util.base64ToBytes(this.sessionKey);
    var iv = Crypto.util.base64ToBytes(iv);
    // console.log(encryptedData,key,iv)
    // 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充
    var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);
    try {
        // 解密
        var bytes = Crypto.AES.decrypt(encryptedData, key, {
            asBpytestrue,
            iv: iv,
            mode: mode
        });
        var decryptResult = JSON.parse(bytes);

    } catch (err) {
        console.log(err)
    }
    if (decryptResult.watermark.appid !== this.appId) {
        console.log(err)
    }
    return decryptResult
}
module.exports = RdWXBizDataCrypt


使用方法如下:

getPhoneNumber(e){
    if (e.detail.errMsg == 'getPhoneNumber:ok'){
        let sessionKey = wx.getStorageSync('session_key') // 从后端获取
      let encryptedData = e.detail.encryptedData;
    let iv = e.detail.iv;
    let appId = app.appId;
    const RdWXBizDataCrypt = require('../../utils/RdWXBizDataCrypt.js');
    const pc = new RdWXBizDataCrypt(appId, sessionKey);
    const data = pc.decryptData(encryptedData, iv);
    console.log(data.phoneNumber); //当前手机号码
    console.log(data)
  }
}


思路也是网上得到了,忘记了得到思路的博客地址(⊙o⊙)…

最后一次编辑于  2021-03-31  
点赞 1
收藏
评论
登录 后发表内容