rsa与jsencrypt加密实现

本文介绍RSA非对称加密算法,包括其工作原理及前后端实现方法。文章详细解释了如何使用node-rsa和jsencrypt库来进行数据加密和解密过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RSA介绍

rsa算法是最重要的算法之一,它是一种非对称加密,是目前最有影响力的加密方式之一,一般由发送方(客户端)和接收方(服务端)各持有一对公钥和私钥。

私钥可以推出公钥,公钥不能推出私钥。

数据交换的过程中,双方交换自己的公钥。各自私钥不公开。

发送时使用对方的公钥进行加密。接收对方发来的密文时,使用自己私钥进行解密。

发送方使用私钥将信息进行加签(签名),将密文与签名作为参数发起请求。

接收方用自己私钥解密得到的明文,请求方公钥,接收的签名,进行验签(签名验证)。

注释:必须会nodejs才能实现

一、配置后端环境

1、下载第三方包rsa

npm i node-rsa/yarn add node-rsa

 2、引入node-rsa并使用

var NodeRSA = require('node-rsa');
var key = new NodeRSA({ b: 512 }); //生成新的512位长度密
var text = 'Hello RSA!'; // 加密前数据
// key.setOptions({ encryptionScheme: 'pkcs1' });
var encrypted = key.encrypt("encrypted", "base64");  // 加密后数据
console.log("encrypted:", encrypted);
var decrypted = key.decrypt(encrypted, 'utf8'); // 解密后数据
console.log('decrypted: ', decrypted);

key.encrypt"加密的数据",加密方式)  

结果:无规则的字符

key.decrypt("加密后的数据",“utf8”)

结果:解密后的数据

3、项目中使用

node代码实现

const publicKey = `
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAISIIx8u/n7M6GyGoXIotkDZKfDk28JJ
3jDhhhFm2i8+2h5NJqmgYIZIsGR4TdeD/Uti0UYFfpdVAsK4/fgyGqsCAwEAAQ==
-----END PUBLIC KEY-----
`; //公钥


const privateKey = `
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBAISIIx8u/n7M6GyGoXIotkDZKfDk28JJ3jDhhhFm2i8+2h5NJqmg
YIZIsGR4TdeD/Uti0UYFfpdVAsK4/fgyGqsCAwEAAQJAHtZSXcIggz6IYiAdVqO0
bHhbMur9W0K2yWbgPBJTeCRxAdsx2ZJK45WfgOn+vCuuXQKNrADk84eCGyg/32AB
0QIhALlhkxdzAvUg4Q1gzn6n6nRI3C2jFPB6XOd64DMv05KpAiEAtwStPQPP5Kyx
3yxmPlprPeOJZdSfYs9RJ/pdQ/+NqzMCIQCCYYL/cg95chd2vkhdQiIeiQP6QQHA
JH9k+sHmnlOSiQIgHn1S9wU5jxkOEOXuqpiZoRfU/ffsDaQIGybkfr2GNm0CIQCK
TUs08mJG+BUvmyYe6YgY5MHuNoKx4ewXh/P0uaxPHw==
-----END RSA PRIVATE KEY-----
`;  //私钥
let mykey = new NodeRSA(privateKey);
const encryptedText = mykey.encrypt("sdsadasd", 'base64'); // 加密后数据
console.log('加密: ', encryptedText);
mykey.setOptions({ encryptionScheme: 'pkcs1' })
var decrypted = mykey.decrypt(encryptedText, 'utf8'); // 解密后数据
console.log('解密: ', decrypted);

二、配置前端代码

解决前端加密长太长报错Message too long for RSA

我们只需要给请求拦截器,给数据进行加密即可

1、首先配置环境

下载jsencrypt

npm i jsencrypt/ yarn add jsencrypt

2、引入并使用

注释:因为我这边只是请求数据的时候加,这个功能, 所有只是给请求

import { JSEncrypt } from 'jsencrypt';
const encrypt = new JSEncrypt();
    encrypt.setPublicKey(`
    -----BEGIN PUBLIC KEY-----
    MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAISIIx8u/n7M6GyGoXIotkDZKfDk28JJ
    3jDhhhFm2i8+2h5NJqmgYIZIsGR4TdeD/Uti0UYFfpdVAsK4/fgyGqsCAwEAAQ==
    -----END PUBLIC KEY-----
    `);
    if (options?.params) {
      if (Object.keys(options?.params)?.length > 0) {
        const data = JSON.stringify(options.params)
        options.params = encrypt.encrypt(data)
      }
    }
    if (options?.data) {
      if (Object.keys(options?.data)?.length > 0) {
        const data = JSON.stringify(options.data)
        options.data = encrypt.encrypt(data)
      }
    }

encrypt.setPublicKey("秘钥") // 设置公钥

encrypt.encrypt(“加密的数据”) //加密的数据

三、结果效果图

请求数据

 响应回来数据

 好的,到这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值