小程序实现RSA加密解密

小程序实现RSA加密解密

由于小程序端无法调用node的原生模块,导致node-rsa无法使用,但是小程序云函数端是nodejs搭建的,所以通过将rsa加密解密算法写入云函数然后小程序端调用。
rsa主要使用的是非对称加密,非对称加密的关键在于 有 公钥 / 私钥
用法:
a.生成一对公钥私钥
b.公钥加密 -> 对应私钥解密
c.私钥加密 -> 对应公钥解密

非对称加密的常见应用方式
a.公钥加密,发给私钥拥有者,私钥解密获得明文。其它人用公钥解不开
b.私钥加密(签名)

公钥的传输(混合加密)
a.使用对称加密算法发布公钥
b.使用对称加密算法解密公钥,再使用公钥加密明文,发给私钥拥有者

云函数端

// 云函数入口文件
const cloud = require('wx-server-sdk')
const NodeRSA = require('node-rsa');
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
  // key:公钥   en:true加密 false解密
  let publicKey = event.key 
  let en = event.en
  let result
  const payload = event.payload
  if(en){
    result = encrypt(payload,publicKey);
  }else{
    result = decrypt(payload,publicKey);
  } 
  return  result
}
// 公钥加密
function encrypt(payload,publicKey) {  
  const key = new NodeRSA();
  let start = '-----BEGIN PUBLIC KEY-----'
  let end = '-----END PUBLIC KEY-----'
  const keyData = start+publicKey+end
  key.importKey(keyData,'pkcs8-public')
  const data = key.encrypt(JSON.stringify(payload),'base64', "utf8")
  return data
} 
// 公钥解密
function decrypt(payload,publicKey) {
  const key = new NodeRSA();
  let start = '-----BEGIN PUBLIC KEY-----'
  let end = '-----END PUBLIC KEY-----'
  const keyData = start+publicKey+end
  key.importKey(keyData,'pkcs8-public')
  const data = key.decryptPublic(payload, "utf8")
  return data
}

小程序端

//加密
wx.cloud.callFunction({
    name: 'RSA',
    data: {
        key:getkey.loginAuthKey,
        en:true,
        //payload:json格式
        payload:payload
    },      
    success(_res) {
        console.log(_res)
    },
    fail(_res) {
        console.log(_res)
    }
})
//解密
wx.cloud.callFunction({
    name: 'RSA',
    data: {
        key:getkey.loginAuthKey,
        en:false,
        //加密后的字符串
        payload:payload
    },      
    success(_res) {
        console.log(_res)
    },
    fail(_res) {
        console.log(_res)
    }
})
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值