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

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

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
需求:可能会有在页面加载的时候想执行某个js,例如统计页面的DOM等等。
最开始其实只是网站的一个小改版,导致的需要发送邮件的功能,本身功能不复杂,不做工具的话,几行代码应该就可以搞定的.. 不过后来想想,这个功能应该还是有一定的小需求的,就做成了工具。
ubuntu 配置nginx反向代理,这里简单记录下,后续再复习..
本篇文章以一个实际的小项目为主题进行从头到尾的讲解实现,该项目总计开发时长约6小时,主要是有很多页面或功能都是现成的,直接复制过来的,剩下的就调整下样式、字段内容等。
简单记录下碰到的一个问题,通过jenkins 远程部署springboot+ vue 项目碰到的问题。
简单记录下dockerfile 以及compose配置
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
浏览网页的时候经常会有文本无法选中,无法复制的情况,这里简单说个简单的方法,不需要下载什么东西,也不用安装什么软件、插件、油猴啥的都不需要。