微信小程序前端解密手机号码

微信小程序前端解密手机号码

月光魔力鸭

2021-01-15 14:22 阅读 1555 喜欢 5 解密手机号

小程序需要用到用户的手机号码,看了下API 以及相关的demo,基本都是服务端进行解密的,问题是需要的参数并没有用到secret,只需要 session_key / iv /encryptedData 即可,那完全可以在客户端进行处理啊。

想到这个问题的肯定不止我一个,动手能力强的也超级多...开动起来吧,直接百度试试水,竟然找到了.. 不过直接按照他的拿来还有报错(有几个引入问题),注释后就OK了。

准备

代码

WXDataEncryp.js

var Crypto = require('../utils/encry/cryptojs.js').Crypto;
function WXDataEncryp(appId, sessionKey) {
  this.appId = appId
  this.sessionKey = sessionKey
}

WXDataEncryp.prototype.decryptData = function (encryptedData, iv) {
  // base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码
  var encryptedData = Crypto.util.base64ToBytes(encryptedData)
  var key = Crypto.util.base64ToBytes(this.sessionKey);
  var iv = Crypto.util.base64ToBytes(iv);

  // 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充
  var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);
  
  try {
    // 解密
    var bytes = Crypto.AES.decrypt(encryptedData, key, {
        asBpytes:true,
        iv: iv,
        mode: mode
    });
    
    var decryptResult = JSON.parse(bytes);
    
  } catch (err) {
    console.log(err)
  }
  return decryptResult
}

module.exports = WXDataEncryp;

cryptoJs下载后扔到项目下,修改cryptojs.js ,如下:

可以先不注释,不报错就OK

使用

直接引入,传参即可。 xxx.js

//引入
const WXDataEncryp = require('../../utils/WXDataEncryp');
...
//获取手机号码按钮点击回调
  async getPhoneNumber(e){
    if(e.detail.iv && e.detail.encryptedData){
      let data = e.detail.encryptedData;
      let iv = e.detail.iv;
      //此处获取 appid session_key
      let appId = config.appid;
      let userInfo = await util.getStoreInfo();
      let sessionKey = userInfo.session_key;
      
      let datains = new WXDataEncryp(appId,sessionKey);
      let rs = datains.decryptData(data,iv)
      //将手机号码进行存储到userInfo中
      console.log(rs.phoneNumber);//获得手机号
    }else{
      util.msg('获取授权失败')
    }
  }

拿到手机号进行回传server 进行保存即可,后续再需要就可以直接跟server要了。

转载请注明出处: https://chrunlee.cn/article/mini-program-get-phone.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
最近有个小功能需要一些基础数据,找了一下在小程序上有发现,暂时还没找到他的网站,想着把这些数据爬一些下来做为基础数据使用的。本来还想着直接反编译小程序的,没想到微信变更了加密方式,以前反编译的路子走不通了。
通过frp做穿透实现https 访问本地http项目。
最近一段时间想着做个资源网站,奈何没数据,准备从几个相关的站点上抓一些数据,数据量每个站点都在几千万左右,这里简单总结下最近一段时间在做的测试。
近期有添加数学公式的需求,找来找去,最后还是选择了最简单的。tinymce+kityformula
功能来源于客户需求。客户有需求想把班级内所有学生的错题本生成pdf文档下载下来... 目前没有做这个功能,只有页面,还好chrome浏览器有保存pdf的功能,但是一想到这么多的学生,这么多的学科、以及这么多的参数... 还好有puppeteer
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
chrome 如何查看placeholder样式以及其他伪类样式
docker build 执行yum失败,找不到repo