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

2023-11-10 16:36

本文主要是介绍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中的结果字符串得到

解密失败,  有太神帮我看一下 问题在哪

这篇关于js 加解密 jsencrypt(非对称加密 rsa)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383923

相关文章

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>