node解密微信小程序手机号码

用node解密微信小程序号码,官网文档有demo下载。

Node目录下有【demo.js】与【WXBizDataCrypt.js】两个js文件。

demo.js代码如下:

注:微信官网文档-获取sessionKey与openid

var WXBizDataCrypt = require('./WXBizDataCrypt')

var appId = 'wx4f4bc4dec97d474b'

var sessionKey = 'tiihtNczf5v6AKRyjwEUhQ==';//小程序调用wx.login且后端请求微信官网的接口可获取sessionKey与openid

var encryptedData = 

  'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM'+

  'QmRzooG2xrDcvSnxIMXFufNstNGTyaGS'+

  '9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+'+

  '3hVbJSRgv+4lGOETKUQz6OYStslQ142d'+

  'NCuabNPGBzlooOmB231qMM85d2/fV6Ch'+

  'evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6'+

  '/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw'+

  'u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn'+

  '/Hz7saL8xz+W//FRAUid1OksQaQx4CMs'+

  '8LOddcQhULW4ucetDf96JcR3g0gfRK4P'+

  'C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB'+

  '6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns'+

  '/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd'+

  'lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV'+

  'oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG'+

  '20f0a04COwfneQAGGwd5oa+T8yO5hzuy'+

  'Db/XcxxmK01EpqOyuxINew==';

var iv = 'r7BXXKkLb8qrSNn05n0qiA==';//encryptedData与iv由小程序<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>组件点击触发获得([文档](https://links.jianshu.com/go?to=https%3A%2F%2Fdevelopers.weixin.qq.com%2Fminiprogram%2Fdev%2Fframework%2Fopen-ability%2FgetPhoneNumber.html))

var pc = new WXBizDataCrypt(appId, sessionKey)

var data = pc.decryptData(encryptedData , iv)

console.log('解密后 data: ', data)

// 解密后的数据为

// data = {"phoneNumber":"13580006666","purePhoneNumber":"13580006666","countryCode":"86","watermark":{"appid":"APPID","timestamp":TIMESTAMP}}

WXBizDataCrypt.js代码如下

var crypto = require('crypto')

function WXBizDataCrypt(appId, sessionKey) {

  this.appId = appId

  this.sessionKey = sessionKey

}

WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {

  // base64 decode

  var sessionKey = new Buffer(this.sessionKey, 'base64')

  encryptedData = new Buffer(encryptedData, 'base64')

  iv = new Buffer(iv, 'base64')

  try {

     // 解密

    var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)

    // 设置自动 padding 为 true,删除填充补位

    decipher.setAutoPadding(true)

    var decoded = decipher.update(encryptedData, 'binary', 'utf8')

    decoded += decipher.final('utf8')



    decoded = JSON.parse(decoded)

  } catch (err) {

    throw new Error('Illegal Buffer')

  }

  if (decoded.watermark.appid !== this.appId) {

    throw new Error('Illegal Buffer')

  }

  return decoded

}

module.exports = WXBizDataCrypt
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容