小程序RSA加密、解密、加签、验签

小程序RSA加密、解密、加签、验签,第1张

npm install  wxapp_rsa

var RSA = require('/wxapp_rsa.js')

// RSA加签

    var sign_rsa = new RSA.RSAKey()

//privateKey_pkcs1需要是-----BEGIN PRIVATE KEY-----开头的私钥

    sign_rsa = RSA.KEYUTIL.getKey(privateKey_pkcs1)

    console.log('签名RSA:')

    console.log(sign_rsa)

    var hashAlg = 'MD5withRSA'

    var hSig = sign_rsa.signString("12345678901234567890", hashAlg)

    hSig = RSA.hex2b64(hSig)// hex 转 b64

    console.log("签名结果:" + hSig)

    // RSA 验签

    var verify_rsa = new RSA.RSAKey()

    verify_rsa = RSA.KEYUTIL.getKey(publicKey_pkcs1)

    console.log('验签RSA:')

    console.log(verify_rsa)

    hSig = RSA.b64tohex(hSig)

    var ver = verify_rsa.verifyString("12345678901234567890", hSig)

    console.log('验签结果:' + ver)

//  RSA加密 【加密字段长度不大于117】

    var encrypt_rsa = new RSA.RSAKey()

    encrypt_rsa = RSA.KEYUTIL.getKey(rsa_public_key)

    console.log('加密RSA:')

    console.log(encrypt_rsa)

    var encStr = encrypt_rsa.encrypt('1234567890')

    console.log(encStr)

    encStr = RSA.hex2b64(encStr)

    console.log("加密结果:" + encStr)

    // RSA 解密

    var decrypt_rsa = new RSA.RSAKey()

    decrypt_rsa = RSA.KEYUTIL.getKey(rsa_public_key_private)

    console.log('解密RSA:')

    console.log(decrypt_rsa)

    encStr = RSA.b64tohex(encStr)

    var decStr = decrypt_rsa.decrypt(encStr)

    console.log("解密结果:" + decStr)

经常看到有点的小伙伴在群里问小程序用户数据解密流程,所以打算写一篇关于小程序用户敏感数据解密教程;

加密过程微信服务器完成,解密过程在小程序和自身服务器完成,即由 encryptData 得到如下数据:

准备知识:

以上3点对于理解解密流程非常重要

根据官方文档,我梳理了大致的解密流程,如下:

重点在6、7、8三个环节。

AES解密三个参数:

服务端解密流程:

下面结合小程序实例说明解密流程:

最后的效果如下:

如果你的小程序没有绑定微信开放平台,解密的数据中不包含unionid参数

小程序绑定微信开放平台连接

从解密的数据看,算得上敏感的数据只有appid;个人觉得openid不是敏感数据,每个用户针对每个公众号会产生一个安全的openid;openid只有在appid的作用域下可用。除非你的appid也泄露了。

那么可以从解密数据得到appid,微信小程序团队是何用意呢?还是前面那句话,openid脱离了appid就什么都不是,openid和appid一起为了方便小程序开发者做到不同小程序应用之间用户区分和隔离,同时能够将微信用户体系与第三方业务体系结合。

所以我认为敏感数据解密的主要用处不是解密后回传给客户端,而是在服务端将微信用户信息融入到自身业务当中。

微信小程序手机号解密步骤

一、通过getPhoneNumber用户授权获取获取加密后的手机号信息

<template>

<view class="content">

<button class="login-btn btn2" open-type="getPhoneNumber"

@getphonenumber="getPhoneNumber">手机号快捷登录</button>

</view>

</template>

引用WXBizDataCrypt.js

var WXBizDataCrypt = require('@/pages/index/WXBizDataCrypt.js')

二、解密前先调用wx.login,获取code发送后台返回sessionkey

getPhoneNumber(e) {

console.log('e',e)

var pc = new WXBizDataCrypt('appid',this.sessionKey)

var data = pc.decryptData(e.detail.encryptedData,e.detail.iv)

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

},

//WXBizDataCrypt.js


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7709685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存