首页 > 其他分享 >RSA加密与解密(jsencrypt.js)

RSA加密与解密(jsencrypt.js)

时间:2023-04-01 18:24:47浏览次数:38  
标签:公钥 加密 RSA js ----- KEY jsencrypt

写在开头

RSA加密不过多解释,直接描述使用时的流程和方法

RSA加密一般是公钥加密私钥解密,多用于前台公钥加密传参给后台,后台私钥解密。本次我用到的场景是跨系统地址栏传参,参数需要加密处理。

使用RSA加密时需要用到jsencrypt,使用方法会介绍怎么安装及使用

jsencrypt介绍

jsencrypt就是一个基于rsa加解密的js库,使用时需要安装

 npm install jsencrypt

使用方法

1、RSA秘钥生成

网上很多人介绍了RSA加密的使用,但是很少有密钥是怎么来的,很无语。目前介绍一种方法(还有一些工具网站可以在线生成密钥,可以自行搜一下,在这不介绍了)

Mac系统内置OpenSSL(开源加密库),所以可以直接在终端上使用命令

Windows系统可以使用git命令行工具(这里注意使用git bash输入命令行,cmd和powershell识别不了命令行)

  • 生成私钥,密钥长度为1024bit
openssl genrsa -out private.pem 1024

执行命令行后会显示如下方图片说明私钥生成成功

1680342323553

  • 从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem

执行命令行后会显示如下方图片说明公钥生成成功

1680342344210

私钥和公钥生成成功后,在项目中会生成两个文件,private.pem 和 public.pem

1680342411877

私钥:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDNNorgFngK1zjHOnQlIUh5NjOxZIiEPZ8Knu6B/IyY0LBRToo1
TZC7/nK6j8on/2sBdv5nFuTwlOpW9UL8C4yZJdjTwYXn5X+wZZsz1RXNI5zjhSXu
GeYzF7WhxusKo6zrR6b0IMNg2W016PWU3UkjOXxoaIGkMN77oIorPP5bHQIDAQAB
AoGABOdOvjgLOkcWRjxxVgnLj4nqBk0erfpC+J//lv+P5H7oF6lGyCtIUBWubCLP
c9E4n1pWjeQQKGeGiflmVlt4So2UPQJD/fvpmT0lswaud+ObbUtFIo4CApHMXdTB
jIC/nDSdFut2Yd32N8OH/QYnzAS1tarLGjk3x+Dg5nY3VEECQQDvM7GLXT2df85I
X+FBX9YiwUPXqciUJp3XdBOngsyENOFu0C3/cBTxvaiKkMXVPqMjOdoCAY+hz/k1
xPUVBpZ5AkEA25/Objru9LI1XSj8M1gJoIUpiR+mJysN7Q7wWbSK6DI+Hz95NQ5r
kAzG89lwMW3dLycH8VPGsWMuxjA7NG0QxQJBAIxDxdKxJFZdAXuTLaWGKy1KIxwt
pT6qvlf+6x+JJaBI2gB+9toYwU9YJaLLbhazmjonzFzsyWrbZ4lOK2De8hECQQCl
uJRgAQBGjCJQRZjodUnuYgzRd5w8efRsKJWcWutmAmN12MNxEYyAieOmJTDPW4NH
DUClDP4k5B5rVgGWsaWxAkA4m0bHwiPqO4/Yz6eyl2jYvljtmqr7KZFXrlsBUrIm
XXaTuMdsOmLlp/u078XFw0N+RaUWxbE6ATH7mTGjB2nV
-----END RSA PRIVATE KEY-----

公钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNNorgFngK1zjHOnQlIUh5NjOx
ZIiEPZ8Knu6B/IyY0LBRToo1TZC7/nK6j8on/2sBdv5nFuTwlOpW9UL8C4yZJdjT
wYXn5X+wZZsz1RXNI5zjhSXuGeYzF7WhxusKo6zrR6b0IMNg2W016PWU3UkjOXxo
aIGkMN77oIorPP5bHQIDAQAB
-----END PUBLIC KEY-----

2、jsencrypt介绍

jsencrypt就是一个基于rsa加解密的js库,使用时需要安装

 npm install jsencrypt

使用时需要引入

import JSEncrypt from 'jsencrypt'

3、加密、解密方法

RSA加密:

  var encryptor = new JSEncrypt()  // 创建加密对象实例
  //之前生成的公钥,复制的时候要小心不要有空格(此处把密钥省略了,自己写的时候可把自己生成的公钥粘到对应位置)
  var pubKey = '-----BEGIN PUBLIC KEY-----MIGfMA0......AQAB-----END PUBLIC KEY-----'
  encryptor.setPublicKey(pubKey)//设置公钥
  var rsaPassWord = encryptor.encrypt('要加密的内容')  // 对内容进行加密

RSA解密:

  var decrypt = new JSEncrypt()//创建解密对象实例
  //之前生成的秘钥(把自己生成的密钥钥粘到对应位置)
  var priKey  = '-----BEGIN RSA PRIVATE KEY-----MIICXAIBA......AKBgQC1QQWRk=-----END RSA PRIVATE KEY----'
  decrypt.setPrivateKey(priKey)//设置秘钥
  var uncrypted = decrypt.decrypt(encrypted)//解密之前拿公钥加密的内容

这样就大功告成了,但是,我使用的时候有个小坑,我是地址栏传参加密使用的,加密后会有一些特殊符号,地址栏传参后会乱码,需要使用URL编码与解码,我使用的是UrlEncode编码 和 UrlDecode解码,有很多方法,可以自行选择。

标签:公钥,加密,RSA,js,-----,KEY,jsencrypt
From: https://www.cnblogs.com/mengzekun/p/17279035.html

相关文章

  • JS基础《JavaScript精粹》笔记摘录
    基础概念和语法基本类型、null、undefined、NaNJavaScript定义了一小批基本类型(primitivetype),它们包括字符串类型(string,单引号或双引号包起来)、数值类型(number,整数和小数都用这个类型)和布尔类型(boolean,值仅有true和false)。JavaScript使用两个特殊的值来表示不存在有意义的值—......
  • JS基础-jQuery快速入门
    作用简介:jQuery是一个JavaScript库,它极大地简化了JavaScript编程,极大简化了DOM操作及事件处理。它通过CSS选择器定位元素,并将这些元素封装在特定JavaScript对象中,然后,开发者就可以更改元素或者给元素添加事件监听器。jQuery能够处理的任何工作,都可以用既有的JavaScript代码......
  • Hello QuickJS
    #include"quickjs.h"#include"quickjs-libc.h"#include<string.h>JSRuntime*QJSRuntime=nullptr;JSContext*QJSContext=nullptr;JSContext*CreateQJSContext(JSRuntime*InRuntime){JSContext*RetVal=JS_NewContext(QJSR......
  • [JSP] 笔记
    JSPjavaserverpagesjava服务端页面jsp=java+html为什么用JSP?JSP为动态页面而生,当页面需要展示动态的数据时,我们不可能像下图这样用servlet中的write写整个页面。那样太过繁琐和复杂。JSP的作用:简化开发,避免用Servlet输出HTML标签。JSP原理JSP本质上......
  • 迁移学习(CDA)《CDA:Contrastive-adversarial Domain Adaptation 》
    论文信息论文标题:CDA:Contrastive-adversarialDomainAdaptation论文作者:NishantYadav,M.Alam,AhmedK.Farahat,DipanjanGhosh,ChetanGupta,A.Ganguly论文来源:2023 ArXiv论文地址:download 论文代码:download视屏讲解:click1介绍基于域对齐的域适应方法实现了......
  • dijsktra
    #include<bits/stdc++.h>usingnamespacestd;constintN=510;intg[N][N],n,m;intdist[N];boolst[N];intdijsktra(){memset(dist,0x3f,sizeofdist);dist[1]=0;for(inti=1;i<n;i++){intt=-1......
  • 清理缓存的问题ctrl+F5或者引入外部js的时候?加任意数字
    系列文章目录文章目录系列文章目录==注意ctrl+F5连同js一起刷新,这样就不用清理缓存了====还有一种方式:引入外部js的时候?加任意数字,如下==注意ctrl+F5连同js一起刷新,这样就不用清理缓存了我们有时候刷新之后,页面不生效,甚至我们要清理缓存页面才生效原因是因为浏览器会缓存js文......
  • 项目一众筹网05_02_[树形开发]菜单管理、API文档发布到web服务器、配置文件里面修改to
    系列文章目录文章目录系列文章目录08-页面显示树形结构-前端-使用真实数据09-准备zTree的API文档(因为现在没有图标)==API文档发布到web服务器上去==配置文件里面修改tomcat的默认端口号(只需改动3个地方)10-前端-显示图标-分析思路(-页面显示树形结构)11-前端-显示图标-代码实现(-页面......
  • 通过Sysmon+Nxlogs收集Windows Server 2012服务器日志-并以Syslog形式发送Json格式数
    0x01环境介绍WindowsServer2012已经安装部署好了域控,目的除了收集Windows服务器本身的日志外还收集域控环境下的各种日志。0x02Nxlog配置和使用使用社区版本即可,下载地址:https://nxlog.co/downloads/nxlog-ce#nxlog-community-edition使用的版本是当前最新版本安装过程就省略,......
  • jsp,servlet的基本原理和作用
    1、jsp技术在传统的JavaWeb项目中,一般不直接使用html页面进行网页的设计,而是使用jsp+serlvet技术进行网页设计及与服务器的交互。Jsp和serlvet是开发动态web的一门技术,特别擅长开发B/S架构的程序。其中,jsp(Javaserverpage,java服务器页面)和html文件几乎是一模一样......