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

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

月光魔力鸭

2021-01-15 14:22 阅读 1604 喜欢 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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
登录方式现在非常多,不过像我这种小站让用户自己注册基本是不可能的了,只能依赖现有的第三方的登录来集成,之前有集成github,不过这个太过针对性,这里准备集成QQ互联登录,慢慢记录下。
国庆马上来临,头像已经先热起来了,为了蹭蹭热度,赶紧加班搞了一个。
需求:可能会有在页面加载的时候想执行某个js,例如统计页面的DOM等等。
上一张中已经完成了比较简易的3D全景浏览,但是...这是写死在xml中的,对于我们实际的项目,这种情况是不可能适应的。所以,来了解下如何动态加载xml已经设置对应的热点。
最开始其实只是网站的一个小改版,导致的需要发送邮件的功能,本身功能不复杂,不做工具的话,几行代码应该就可以搞定的.. 不过后来想想,这个功能应该还是有一定的小需求的,就做成了工具。
ubuntu 配置nginx反向代理,这里简单记录下,后续再复习..
昨天客户发现了个小BUG,文章发布使用的ueditor, 上传视频的时候当时好好的,后来怎么就是播放不了?
docker build 执行yum失败,找不到repo