前端非对称加密,后端Node.js解密(jsencrypt插件)(不需要密钥转码)


    网上找了一圈node.js的RSA解密方法,多数是在同一端进行加密和解密,但是我要的需求是前端加密,发给后台解密。起初前端Vue项目使用jsencrypt插件对数据进行加密,然后傻傻的去后台也npm安装jsencrypt  , 以为用它在后端解密就行, 但是一引用就会报错,它不是一个后端插件,所以不要在后端用装这个。node.js自带有加密模块crypto,但是尝试了很多次用crypto解密前端发过来的数据都报错了:Error: error:0406506C:rsa routines:rsa_ossl_private_decrypt:data greater than mod len。最后实在是没有办法,在npm上搜到了一个用于后台的加解密插件能够成功解密。后来对JS模块化有一点了解之后理解了为什么会报错(我是一个前端小白)

### 1.前端插件:jsencrypt
  • 安装
npm install jsencrypt

import { JSEncrypt } from 'jsencrypt'
  • 用法:https://www.npmjs.com/package/jsencrypt

  • 关于密钥格式
    前端的公钥我直接赋值的,用记事本打开 pub.pem公钥文件直接复制的,粘贴到代码里会有语法错误,我把每一行都加上了引号,行与行之间用加号连接。

"-----BEGIN RSA PRIVATE KEY-----"
+"MIICXAIBAAKBgQC0ujuQTkK10GVRk/V/QkavO25DLgsiL22l6QCtCO7+2MVLlZON"
+"Qj9d5AgAgmSqqfO0ZNbq6yde1zyXR5Mligq1CU+qNj72mJ6Bk7cz/gWFOcz8bGpK"
.......后面省略

2.node.js后端插件:node-jsencrypt

  • 安装
npm install --save node-jsencrypt

const JSEncrypt = require('node-jsencrypt')
  • 用法:与jsencrypt用法完全相同

  • 关于密钥格式:后端我是用fs读取私钥文件。

    // 设置私钥
    const prvKey = fs.readFileSync('../openssl/rsa-prv.pem').toString()    // 路径自己决定,用toString()转换成字符串,不转会报错
    let jsencrypt = new JSEncrypt()
    jsencrypt.setPrivateKey(prvKey)

    // 解密数据
    let dec_by_prv = jsencrypt.decrypt(前台数据);



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM