RSA加密与解密之JSEncrypt

技术栈 JavaScript + JSEncrypt

简介

RSA加密算法是一种非对称加密算法,有公钥、私钥,长度越长 加密强度越大,高于768位的密钥相对比较安全,所以被广泛使用。
使用公钥加密的数据,利用私钥进行解密。使用私钥加密的数据,利用公钥解密。
目前常用的RSA加密解密工具之一就有JSEncrypt。

实现

安装

npm install jsencrypt

封装

此处用实际的应用场景(前后端式)进行理解,即前端放A公钥、B密钥。服务端放B公钥、A密钥。服务端放B公钥、A密钥。服务端用B公钥加密数据传给前端,前端用B密钥解密。

import JSEncrypt from 'jsencrypt/bin/jsencrypt'

// 前端放A公钥、B密钥,服务端放B公钥、A密钥。
// 前端用A公钥加密数据传给服务端,服务端用A密钥解密
// 服务端用B公钥加密数据传给前端,前端用B密钥解密

const publicKey = '' // 服务端公钥
const privateKey = '' // 前端私钥

// 加密
export function encrypt(txt) {
  const encryptor = new JSEncrypt()
  encryptor.setPublicKey(publicKey) // 设置公钥
  return encryptor.encrypt(txt)    // 对数据进行加密
}

// 解密
export function decrypt(txt) {
  const encryptor = new JSEncrypt()
  encryptor.setPrivateKey(privateKey) // 设置私钥
  return encryptor.decrypt(txt) // 对数据进行解密
}

应用

生成公钥私钥

在调用已封装好的工具前,需要有配套的公钥、私钥,可以利用在线工具生成。
密钥对生成 http://web.chacuo.net/netrsakeypair
本次示例所用的公钥、密钥为:

// 公钥
const publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ske9OID8IPsehg0U7fQhSKdoeQ6eK0qbyOHjDoyI/zr6Rl7T10mJDf5klFDmYQ0ystHtpYaabb6adxbiz7jDn3q8uB+jNrw7FGY2FndnUJ1JlzwNVnUqeXNtvUSBGkyz1hqiN8HmRy1vXr16nkAHtqI+FsKCM8ZwIN1HGowVgYVu0/aGyW91pTT+8SFJHy5gWRsZNQPSsIl2kXImJoFhuV8RhPg+uSAuqFK/2sWxKEhGVAKltC8yG5H/ojl0UkWmJh7PqblpXuckU7guAIGQFkVvLbfXMxmNYPza8kjAF8gBOsesh2moROY7cEq+/crrK3HlMFWZPTb3widaXnh/wIDAQAB' 
// 私钥
const privateKey = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSyR704gPwg+x6GDRTt9CFIp2h5Dp4rSpvI4eMOjIj/OvpGXtPXSYkN/mSUUOZhDTKy0e2lhpptvpp3FuLPuMOfery4H6M2vDsUZjYWd2dQnUmXPA1WdSp5c229RIEaTLPWGqI3weZHLW9evXqeQAe2oj4WwoIzxnAg3UcajBWBhW7T9obJb3WlNP7xIUkfLmBZGxk1A9KwiXaRciYmgWG5XxGE+D65IC6oUr/axbEoSEZUAqW0LzIbkf+iOXRSRaYmHs+puWle5yRTuC4AgZAWRW8tt9czGY1g/NrySMAXyAE6x6yHaahE5jtwSr79yusrceUwVZk9NvfCJ1peeH/AgMBAAECggEAc4uGKay/hhd7CM692Gp5ppF8IWNvXflmuneadRbtp2aclzG9s5qXLuF0MG3VhZDAM65NCFyt6+c+y8rcb68wXiBOK4c+N85IpPJxu58/aVYly7rEfipY9i0foDwk/UABd0G7XH4NtzPSuCRwK3DazQ70aFfXX07PigVFrCbVikFa7U3ceduaa28YcW5Ftm5eCDm9ShjpTtrjmSVxsYAfe+1jwIWDpY7DXpXYpzhxux/HHySNBLh0w3oPA1kSvNBwV4nBAFpK0Rh7Rhrm3NvWclm3oitv3XCWihDM/unFe3Do5dV18l4GGx80jWR1tFhGVKh4DN73r9sFsbc2k1W+6QKBgQDszY7xGiFLF8PBKzoMctcLwFxEzwL2LLBHPc4dQgKxriX1w59UulmWSZGJf6Su6z0SWtAVxfe/JoMFb7i0ZGGxQonFPU11phX3Nlmnq8gRBlC2sBN1/ETTqxPC6I/tNDuknwye9pK1MGqZ+XbBral5f6X4gUvrLW5260Yqy8jpxQKBgQDj353+mtD7isd/QPDOagffASGnnlLhWfR28xyWIb0826RmMaqY19ovebX+39/+zSi5odzpzBHhhWUhucZolMPmfLcQoeb3BHuc1Bc+DUh+IRVj+WXSXVr0+zCY1rEEG0p631e/qShx3O/Uix5bpZUWDcU2NvXGUtHIdf6EeD/M8wKBgBnvobpSjFb3MV+U5nS6l0cYOILo0YA5AM2svUiDFFx1oH68gFT9XBaT1DblHhpydWvvOl9IIYx0IWGVDPvlCrYpfYF252b9W+aJs2Qj8nO651g7DMadbMRqNm3gnvLyB55ONUmr5AGoXeSjaBhqdudxzbHcJ36IqVKpDjRdwZGpAoGAdPeLuezt6LBLxt4mvU1fzPBfvhJeqJ3sBkK0IbwfzuVPdcV4tAvYSxZGfRWdfMUCaobTRo8hfoliZ/VcCsKR6/WIYlk4nQMIEHAtngRjeZqxyCd0RI726VkmkM1i/6Cikn+iIxdJU2j9EjR22MQdyrw2xqVfcvWACU3H32d6GFECgYEAuFLorZjmclkHW/kLhNBrcMudqoDub834J1kpqatsHVxY2bFu7OuUai/69L7WVo56LqRQip35Xtx5EkidA+WKu1Kj74nkGy7Gckra1tJJkhT3fEygvo7dh1rcEX9njDdGyLYNnG6l9MLGHicm/U6/4T/xjPm7k/ohJszFnFNwWa0=' 

调用

import { encrypt,decrypt }  from '@/utils/jsencrypt.js';
/**
 * rsa加密解密
 */
const originData = 'I am admin';
const translateData1 = encrypt(originData);
const translateData2 = decrypt(translateData1);
console.log('originData: ', originData);
console.log('translateData1: ', translateData1);
console.log('translateData2: ', translateData2);

效果

rsa加密解密效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值