当前位置: 首页 > news >正文

js 加解密 jsencrypt(非对称加密 rsa)

这是一个非对称加密的库,可以进行 rsa 加解密
使用方法

安装

npm install jsencrypt --save

jsencrypt rsa 加解密

let rsaStr = "这就是一个RSA加密的测试";let jsencryptObj = new jsencrypt();jsencryptObj.getKey();  //这个方法用来生成一个密钥对let publicKey = jsencryptObj.getPublicKey();  //得到公钥let privateKey = jsencryptObj.getPrivateKey();  //得到私钥let result1 = jsencryptObj.encrypt(rsaStr);  //加密var st = jsencryptObj.decrypt(result1);	//解密

上面是最基本的用法, 但是我们通常是 从前端接收到后端的数据,然后再去解密的,这里我们用 php 做后端加密数据,再用js 作前端来解密数据
这里我们首先产生一个公,私钥对

公钥字串
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDNW0UTqFuKE4rA
NeUkPC5GhB8XcrcepL3jFLhK7YfD/spropSxqCH6PQ+VchIsCAGAtrKVyABjsGbU
yWa5ww90Z0FHo4UR2WnucvAlzmS2ENXSCif7W5Tj3lUddM9ZURwz3lWTA7QZLoIf
4AfR0zPJq0XhYzaAOdNoFm5AoZ27zSD3uBBL4vOXEfwZcOP6fQLrUkwSnKPj08BK
RRmwie3pJ2pU7eBX9NkS9oWU5u74LzJ+u4W6pdYGZo/TjTCyPF44Udkx+Rp9+BUg
Wd23rcVF2VmdWsZsgcIugjH/8z1sYbF0GdGe9CFM2CydxpzE91vqHEm7PaeaBWbe
JxsOdowdAgMBAAECggEAW04waWwav0qvD4UnC7RiUuIdvNw5hTt0XknxIwd3rPJV
aAQSnucFrHCHxEfCwqcQm/0fbC9P1QMyxXuC3CdZcMUUJlkTKnuDeQzLr9OTvcvA
djIj0sPGcIaDS6SLKMhChOFfJQ2pfuTJ4IhIkceZKBqp6GunaN3NHGOUw9HYAw6G
XrRvUXr4KSXwqAF83ufSKzV7jrsVu6Pn/59svwrJdYZp3jZ6eqDn6o5PLbVw55GM
81JsrDbv3gxcAsgbZnx9GlupgrRqto7MEJlF4q5sybCksDHbGWL2i1zRfbrtz93W
u56jEJKCDZq/cjRt19RKf03RaGgLa+Q+hVMEzrYWgQKBgQDyLG9pppRexlB3zp17
dJnesXXdfda9dy183e7bv9XTtrcZkbzLeOlWKVQcXgPozsQSPeoylGnq07ohVIze
Zn5DkRJ5G6A5L4RUUNva8B4IYue62yPG9is+UgENLZe77xh0/vBD8TGACX7FTvcp
qeN4u4aFJXdJu4ZDa7mBHdvIfQKBgQDZFLkqljYC8Lvy0GYgeEgBxOTwN78s1Wkg
38G6oN++glFBX6P0T7TffWv2AGKTNCi6xfVRpnPmKfuUV7qo6ltHp2PjkUhylVQy
9OyW4rA0cDFj/ng6PCa0gzApHOzE1zVgLyXJiEkB0IHZ96+Vk+T2GcT7zMAaqSm2
sgM+QcrEIQKBgHU8+8bK5QMowKXveZ/dp+v+P1A17nKUsonDqzHpIew3hVa0jhB2
/Yc/xL9i6EOZbaRjIvDPlqMfUvl1xCiat7+gCLBmpl9o2Ig1COpp2jA3KXX1RtG4
NOEbs/ScQNuzeUSScuCBcHRKpHuCqfcajsvRBOOKasBgLzSOfyS5vr/FAoGBALSy
vGPHv9P4weqgMLLMjNv0IsIXFWrjhmwX9fI9IaI6Zhrt2tNuWdhDVc/jiCqSm2jF
iaxay1UHE2TrFfSviCYAH3T5pX3D8d+s4xfCQPyVe3eKBlgrY+iU300Jx8kef06+
UE0Oxf7dqole1OjEwC1fTApx6GMI9zEdwvda2schAoGAKlzCLgEK3a/U6Tl/WVmo
at34IXFSK+GRQvuMYube6KYndwnWq5n6eqNN2FbrcDMhK+lsGz2f4BVvftFZeCu1
SHCoHpU9wObmQb64ZYf8BrIOkSCF6qDlQGoLaJhpCtLmzAxgABu4Ou1lC/dW7zcK
vnjq5XBRANexvfDtqU0MM28=
-----END PRIVATE KEY-----
私钥字串
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzVtFE6hbihOKwDXlJDwu
RoQfF3K3HqS94xS4Su2Hw/7Ka6KUsagh+j0PlXISLAgBgLaylcgAY7Bm1MlmucMP
dGdBR6OFEdlp7nLwJc5kthDV0gon+1uU495VHXTPWVEcM95VkwO0GS6CH+AH0dMz
yatF4WM2gDnTaBZuQKGdu80g97gQS+LzlxH8GXDj+n0C61JMEpyj49PASkUZsInt
6SdqVO3gV/TZEvaFlObu+C8yfruFuqXWBmaP040wsjxeOFHZMfkaffgVIFndt63F
RdlZnVrGbIHCLoIx//M9bGGxdBnRnvQhTNgsncacxPdb6hxJuz2nmgVm3icbDnaM
HQIDAQAB
-----END PUBLIC KEY-----

在php中利用公钥来加密 (注意一下,公钥字符串的定义,是使用的 长字符定义的方式)
php rsa 加密很简单

$str="这是一个后端加密,前端解密的实验,RSA算法";//这里得到了私钥的密钥$private_key = <<<"eto"
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDNW0UTqFuKE4rA
NeUkPC5GhB8XcrcepL3jFLhK7YfD/spropSxqCH6PQ+VchIsCAGAtrKVyABjsGbU
yWa5ww90Z0FHo4UR2WnucvAlzmS2ENXSCif7W5Tj3lUddM9ZURwz3lWTA7QZLoIf
4AfR0zPJq0XhYzaAOdNoFm5AoZ27zSD3uBBL4vOXEfwZcOP6fQLrUkwSnKPj08BK
RRmwie3pJ2pU7eBX9NkS9oWU5u74LzJ+u4W6pdYGZo/TjTCyPF44Udkx+Rp9+BUg
Wd23rcVF2VmdWsZsgcIugjH/8z1sYbF0GdGe9CFM2CydxpzE91vqHEm7PaeaBWbe
JxsOdowdAgMBAAECggEAW04waWwav0qvD4UnC7RiUuIdvNw5hTt0XknxIwd3rPJV
aAQSnucFrHCHxEfCwqcQm/0fbC9P1QMyxXuC3CdZcMUUJlkTKnuDeQzLr9OTvcvA
djIj0sPGcIaDS6SLKMhChOFfJQ2pfuTJ4IhIkceZKBqp6GunaN3NHGOUw9HYAw6G
XrRvUXr4KSXwqAF83ufSKzV7jrsVu6Pn/59svwrJdYZp3jZ6eqDn6o5PLbVw55GM
81JsrDbv3gxcAsgbZnx9GlupgrRqto7MEJlF4q5sybCksDHbGWL2i1zRfbrtz93W
u56jEJKCDZq/cjRt19RKf03RaGgLa+Q+hVMEzrYWgQKBgQDyLG9pppRexlB3zp17
dJnesXXdfda9dy183e7bv9XTtrcZkbzLeOlWKVQcXgPozsQSPeoylGnq07ohVIze
Zn5DkRJ5G6A5L4RUUNva8B4IYue62yPG9is+UgENLZe77xh0/vBD8TGACX7FTvcp
qeN4u4aFJXdJu4ZDa7mBHdvIfQKBgQDZFLkqljYC8Lvy0GYgeEgBxOTwN78s1Wkg
38G6oN++glFBX6P0T7TffWv2AGKTNCi6xfVRpnPmKfuUV7qo6ltHp2PjkUhylVQy
9OyW4rA0cDFj/ng6PCa0gzApHOzE1zVgLyXJiEkB0IHZ96+Vk+T2GcT7zMAaqSm2
sgM+QcrEIQKBgHU8+8bK5QMowKXveZ/dp+v+P1A17nKUsonDqzHpIew3hVa0jhB2
/Yc/xL9i6EOZbaRjIvDPlqMfUvl1xCiat7+gCLBmpl9o2Ig1COpp2jA3KXX1RtG4
NOEbs/ScQNuzeUSScuCBcHRKpHuCqfcajsvRBOOKasBgLzSOfyS5vr/FAoGBALSy
vGPHv9P4weqgMLLMjNv0IsIXFWrjhmwX9fI9IaI6Zhrt2tNuWdhDVc/jiCqSm2jF
iaxay1UHE2TrFfSviCYAH3T5pX3D8d+s4xfCQPyVe3eKBlgrY+iU300Jx8kef06+
UE0Oxf7dqole1OjEwC1fTApx6GMI9zEdwvda2schAoGAKlzCLgEK3a/U6Tl/WVmo
at34IXFSK+GRQvuMYube6KYndwnWq5n6eqNN2FbrcDMhK+lsGz2f4BVvftFZeCu1
SHCoHpU9wObmQb64ZYf8BrIOkSCF6qDlQGoLaJhpCtLmzAxgABu4Ou1lC/dW7zcK
vnjq5XBRANexvfDtqU0MM28=
-----END PRIVATE KEY-----
eto;openssl_private_encrypt($str,$result,$private_key);//参数中的 $result 就是 rsa 的加密结果dump($result);//加密结果是一个二进制的数据,所以我们以base64一下传给前端echo base64_encode($result);
//结果 : CcNW2lFUQHYAhz60CHpwPbCXlqpZYQIK0gJZWeE5IPJG9Hw8e3arJ3j9PqsLrDyCRub5pOJQQqrOpMIyOZCP05BUcJRpBi+DR6Z7MrJuqw7B+283mZO/bPllhj6SILz7BD17zodmzw9E+QZG/DdLouOGVKHiirU9STFRgD3DiN93Rj8JzK70gNCnWrEtrCfHA+NdagLCdUEITxf3DL574ZlUXrSIvCj/Rf48/gXWypxG333Pp/IswHtBL6UOuiKGyY//t2aTqCgWRT8qy3nvWAXfH4WgePe+irPYxwOQkXh90oSiRDT2gLhnLV3ZWSSMqaAfCgKNKsCF+uGdONwMiw==

js 进行解密
把php中的结果字符串得到

解密失败,  有太神帮我看一下 问题在哪
http://www.lryc.cn/news/227479.html

相关文章:

  • xlua游戏热更新(lua访问C#)
  • 04-Spring中Bean的作用域
  • xlua游戏热更新(C#访问lua)
  • 【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)
  • 基于springboot实现桥牌计分管理系统项目【项目源码】
  • 机器学习——朴素贝叶斯
  • 【PTE-day07 文件上传2】
  • 设计模式之十一:代理模式
  • 在spring boot中调用第三方接口时重试问题
  • 记录一次多数据源配置失效的情况
  • EasyExcel导出替换列中的变量
  • 机器人规划算法——将多边形障碍物离散到地图像素点上?
  • windows11使用docker部署安装minio
  • 【JavaEESpring】Spring Web MVC⼊⻔
  • flutter逆向 ACTF native app
  • 【Redis】set 集合
  • 【算法与设计模式】
  • Javaweb之javascript的小案例的详细解析
  • Vant 移动端UI 组件自动引入
  • 敏捷开发是什么?敏捷开发流程是怎么样的?
  • 【CASS精品教程】cass3d 11.0加载超大影像、三维模型、点云数据
  • Unity Input System最简单使用
  • 3.前端调式(断点调式)
  • 拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)
  • ESP32网络开发实例-将数据保存到InfluxDB时序数据库
  • NestJS——基于Node.js 服务器端应用程序的开发框架
  • EXCEL中将UTC时间戳转为日期格式(精确到秒)
  • 2023年【起重机械指挥】考试试卷及起重机械指挥操作证考试
  • 组件的设计原则
  • 安卓编译命令mm和mmm的区别(mm编译当前工作目录,mmm可编译指定目录)