微信小程序 RSA加密 解密 加签 验签

效果演示:


Github链接:https://github.com/UFO0001/WX_RSA

简要说明:

1. 将 wx_rsa.js文件copy到自己想放置的目录下,并在需要用到的js文件中引用 如:

var RSA = require('../../utils/wx_rsa.js')
2. 在对应的触发事件下进行相应的

加密:

var input_rsa = this.data.input;
    var encrypt_rsa = new RSA.RSAKey();
    encrypt_rsa = RSA.KEYUTIL.getKey(publicKey);
    encStr = encrypt_rsa.encrypt(input_rsa)
    encStr = RSA.hex2b64(encStr);
    console.log("加密结果:" + encStr)

解密:

 var decrypt_rsa = new RSA.RSAKey();
    decrypt_rsa = RSA.KEYUTIL.getKey(privateKey);
    if (encStr.length <=0){
      wx.showToast({
        title: '请先加密',
        icon: 'loading',
        duration: 1000
      })
    }else{
      encStr = RSA.b64tohex(encStr);
      console.log(encStr + "001--100")
      var decStr = decrypt_rsa.decrypt(encStr)
      console.log("解密结果:" + decStr)
      this.setData({
        output: decStr
      })
    }

加签:

    var sign_rsa = new RSA.RSAKey();
    sign_rsa = RSA.KEYUTIL.getKey(privateKey);
    console.log('加签RSA:')
    console.log(sign_rsa)
    var hashAlg = 'sha1';
    Sig = sign_rsa.signString("signData", hashAlg);
    Sig = RSA.hex2b64(Sig); // hex 转 b64
    console.log("加签结果:" + Sig)
    this.setData({
      output: Sig
    })

验签:
 var verify_rsa = new RSA.RSAKey();
    verify_rsa = RSA.KEYUTIL.getKey(publicKey);
    if (Sig == ""){
      wx.showToast({
        title: '请先验签',
        icon: 'loading',
        duration: 1000
      })
    }else{
      Sig = RSA.b64tohex(Sig)
      var ver = verify_rsa.verifyString("signData", Sig)
      console.log('验签结果:' + ver)
      this.setData({
        output: Sig
      })
    }

3. 注意区分RSA私钥的类型,分为pkcs1和pkcs8, pkcs8格式的私钥主要用于Java中

 pkcs1格式:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY------

 pkcs8格式:
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----


4. 附一个在线生成RSA密钥的链接:http://www.bm8.com.cn/webtool/rsa/


5. 加密、签名 简介

数据加密:用公钥加密,只有用私钥解开,因为私钥只有你自己有,所以他保证了数据不能被别人看到
数据签名:用私钥加密,只能用公钥解密,任何人都可以用公钥验证。因为私钥只有你自己有,所以它可以保证数据只能是你发出的,不可能有别人发出,除非你得私钥丢失或被第三方破解出来。

签名起不到加密作用,但可以确定是谁发出的信息
使用公钥加密算法,可以对明文进行加密,但不能确定是谁发出该消息


欢迎留言交流指正 谢谢!:)

本文链接:http://blog.csdn.net/ufo00001/article/details/72822907


  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
OpenSSL是一个开源的加密库,它提供了RSA加密解密、签名和验签的功能。 对于RSA加密解密,我们可以使用OpenSSL提供的命令行工具或者API来实现。 使用命令行工具,我们可以通过以下命令进行RSA加密: openssl rsautl -encrypt -in <input file> -out <output file> -inkey <public key file> -pubin 其中,<input file>是要加密的文件,<output file>是加密后的文件,<public key file>是存储公钥的文件,-pubin参数表示输入的是公钥。 使用命令行工具,我们可以通过以下命令进行RSA解密: openssl rsautl -decrypt -in <input file> -out <output file> -inkey <private key file> 其中,<input file>是要解密的文件,<output file>是解密后的文件,<private key file>是存储私钥的文件。 对于RSA签名和验签,我们可以使用以下命令进行签名: openssl rsautl -sign -in <input file> -out <output file> -inkey <private key file> 其中,<input file>是要签名的文件,<output file>是签名后的文件,<private key file>是存储私钥的文件。 使用以下命令进行验签: openssl rsautl -verify -in <input file> -out <output file> -inkey <public key file> -pubin 其中,<input file>是要验签的文件,<output file>是验签后的文件,<public key file>是存储公钥的文件,-pubin参数表示输入的是公钥。 使用OpenSSL的API进行RSA加密解密、签名和验签的操作也是类似的,我们可以通过调用相应的函数来实现。需要注意的是,API的使用需要在代码中显式引入OpenSSL的头文件和链接OpenSSL的库文件。 总之,OpenSSL提供了便捷的工具和API来实现RSA加密解密、签名和验签的功能,无论是命令行工具还是API,都可以选择合适的方式进行操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值