RSA 非对称加密解密,可以javascript和java加解密

2023-05-16

公钥与私钥机制属于非对称加密的范畴,非对称是相对于对称加密而言的,对称加密用于加密与解密的密钥是同一把,而非对称加密则用于加密与解密的密钥不相同,一个公开,称为公钥;一个保密,称为私钥,公钥与私钥必须成对出现,只有是配对的公钥与私钥才能用于加解密。公钥通过非安全通道发放,私钥则由发放者保留,公钥加密的数据,只能使用其配对的私钥对其解密;反之,私钥加密的数据,只可使用公钥对其解密。

一、 什么是RSA加密?

RSA是一种使用不同的加密密钥与解密密钥的体制,不对称加密算法。公钥加密,私钥解密。
RSA算法是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,一般推荐使用1024位。

二、引入jsencrypt.js文件

CDN下载或引用js
https://www.bootcdn.cn/jsencrypt/

<script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.2.1/jsencrypt.min.js"></script>

三、生成公钥和私钥

RSA加密解密需要用到公钥和私钥,可以在这个网站生成
http://web.chacuo.net/netrsakeypair
公钥在外部使用,私钥在系统内部使用,生成后妥善保管

四、使用

  1. 将下载好的jsencrypt.js放在一个专门的文件夹,例如 utils/jsencrypt.js

  2. 为了方便使用,在同一目录下新建文件 rsa.js:

import { JSEncrypt } from './jsencrypt'
 
// 加密公钥
const key = `---`
 
// 加密
export function rsaEncrypt (msg) {
  const jsencrypt = new JSEncrypt()
  jsencrypt.setPublicKey(key)
  const encryptMsg = jsencrypt.encrypt(msg)
  return encryptMsg
}
 
// 解密私钥
const privateKey = `---`
 
// 解密
export function rsaDecrypt (msg) {
  const decrypt = new JSEncrypt()
  decrypt.setPrivateKey(privateKey)
  const decryptMsg = decrypt.decrypt(msg)
  return decryptMsg
}
  1. 在第二步已经导出了加密(rsaEncrypt)和 解密(rsaDecrypt)的方法,在需要用到的地方导入使用即可。
import { rsaEncrypt, rsaDecrypt } from '@/utils/rsa'
 
// 明文
let msg = '我是被传输的重要明文信息哈哈哈哈哈'
// 加密后的密文
let encryptMsg = rsaEncrypt(msg)
console.log(encryptMsg )
// 解密后的明文
let decryptMsg = rsaDecrypt(encryptMsg)
console.log(decryptMsg)

五、也可以在java中加密解密

请参考
https://blog.csdn.net/weixin_45740811/article/details/124344674

核心解密代码如下

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

import javax.crypto.Cipher;

public class EncryptUtil {

	public static String encrypt(String text,String publicKeyStr) throws Exception {
		X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyStr));
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
		Cipher cipher = Cipher.getInstance("RSA");
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		byte[] result = cipher.doFinal(text.getBytes());
		return Base64.getEncoder().encodeToString(result);
   }

参考文章
前端使用jsencrypt进行RSA加密解密(uniapp也可用)
https://blog.csdn.net/qq_40146789/article/details/118929205

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RSA 非对称加密解密,可以javascript和java加解密 的相关文章

  • 数据结构与算法(Java版) | 几个经典的算法面试题(下)

    上一讲 xff0c 我给大家介绍了两个经典算法面试题 xff0c 即字符串匹配问题和汉诺塔游戏 xff0c 这一讲 xff0c 我再来给大家介绍两个经典算法面试题 xff0c 它们就是八皇后问题和马踏棋盘算法 xff0c 注意 xff0c
  • 数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结

    为了让大家明白算法的重要性 xff0c 以上我就列举了几个经典的算法面试题 xff0c 我的目的也很简单 xff0c 就是希望引起大家对算法的一个兴趣 之所以在正式讲解数据结构与算法之前就引出这几个经典的算法面试题 xff0c 是因为我想告
  • 数据结构与算法(Java版) | 数据结构与算法的重要性

    通过前几讲我给大家介绍的几个经典的算法面试题 xff0c 相信大家现在应该对数据结构与算法有了一个很浓烈的学习兴趣 xff0c 嘻嘻 x1f92d xff0c 数据结构与算法学起来还是非常有意思的 xff0c 不骗你 xff01 激起大家的
  • 数据结构与算法(Java版) | 本套系列教程的内容介绍

    文章目录 本套系列教程的内容介绍第一章节 xff1a 内容介绍和授课方式第二章节 xff1a 数据结构与算法的介绍第三章节 xff1a 稀疏数组和队列第四章节 xff1a 链表第五章节 xff1a 栈第六章节 xff1a 递归第七章节 xf
  • 数据结构与算法(Java版) | 本套系列教程的课程亮点和授课方式

    接下来 xff0c 在这一讲 xff0c 我会花一点时间同同学们达成一个共识 xff0c 就是我们这套系列教程在讲述的时候 xff0c 究竟是以一种什么方式来讲述的 我希望 xff0c 经过我的讲解之后 xff0c 大家能够对我们这套系列教
  • 数据结构与算法(Java版) | 数据结构与算法的关系

    从这一节起 xff0c 咱们就要开始进入到 第二章 数据结构与算法的介绍 的学习中了 xff0c 总的来说 xff0c 第二章要讲解的内容其实也不是特别的多 xff0c 内容也多偏理论 xff0c 相信大家学起来是会比较轻松愉快的 接下来
  • 数据结构与算法(Java版) | 就让我们来看看几个实际编程中遇到的问题吧!

    上一讲 xff0c 我给大家简单介绍了一下数据结构 xff0c 以及数据结构与算法之间的关系 xff0c 照理来说 xff0c 接下来我就应该要给大家详细介绍线性结构和非线性结构了 xff0c 但是在此之前 xff0c 我决定还是先带着大家
  • 数据结构与算法(Java版) | 线性结构和非线性结构

    之前 xff0c 我们说过 xff0c 数据结构是算法的基础 xff0c 因此接下来在这一讲我就要来给大家重点介绍一下数据结构了 首先 xff0c 大家需要知道的是 xff0c 数据结构包括两部分 xff0c 即线性结构和非线性结构 知道这
  • 数据结构与算法(Java版) | 稀疏数组的应用场景

    接下来 xff0c 我们就要正式进入第三章 稀疏数组和队列的学习中了 xff0c 顾名思义 xff0c 在这一章节我会为大家介绍两种数据结构 xff0c 即稀疏数组和队列 当然 xff0c 按照我们这套系列教程的安排 xff0c 首先我会为
  • Lottie源码浅探

    Lottie xff08 源码版本 xff1a 2 5 4 xff09 动画步骤 xff1a 前置知识 xff1a Lottie对动画的变换主要是通过Matrix实现 xff0c 因此需要了解Matrix相关知识 xff0c 可以参考下面的
  • 数据结构与算法(Java版) | 稀疏数组的一个实际应用案例

    提出需求 xff1a 使用稀疏数组来保存类似棋盘或者地图等等映射而来的二维数组 xff0c 然后存盘 xff0c 并且希望可以重新恢复为原来的二维数组 通过上一讲的学习 xff0c 我们知道了使用稀疏数组即可保存类似下面的二维数组 xff0
  • 如何进行日常写作训练?

    我似乎陷入了一种巨大的痛苦漩涡中而不能自拔 xff01 最近我感觉写一篇文章真的是太费劲了 xff0c 就好像要用尽我全身力气似的 xff0c 这种感觉实在是太窒息了 xff0c 第一次体验到写一篇文章写得都快要死了的那种感受 xff0c
  • 向刘邦同志学习

    引言 最近在知乎闲逛 xff0c 无意中看到一个问题 xff0c 即刘邦最大的才能是什么 xff0c 顿时觉得这个问题很有趣 xff0c 于是就留心多翻了一些回答 xff0c 发现其中有一个叫张福来的用户的回答深得我心 xff0c 遂果断记
  • 数据结构与算法(Java版) | 队列的应用场景和介绍

    队列的一个应用场景 给大家介绍完稀疏数组这种数据结构之后 xff0c 接下来我再来给大家介绍另外一种数据结构 xff0c 即队列 队列 xff0c 听其名而知其义 xff0c 相信大家应该都在现实生活中见过 xff0c 比如在火车站排队买票
  • 数据结构与算法(Java版) | 数组模拟队列的思路分析与代码实现

    思路分析 上一讲我们讲过 xff0c 队列既可以用数组来实现 xff0c 也可以用链表来实现 xff0c 但由于我们比较熟悉数组这种结构 xff0c 所以这里我会先给大家讲一下数组这种实现方式 xff0c 至于链表这种实现方式 xff0c
  • android 8.1 MTK 方案修改记录

    Music播放音乐时锁屏不需要显示专辑封面 span class token operator 43 43 span span class token operator 43 span b span class token operator
  • centos 5 yum 不能用出现all mirror URLs are not use ftp http or file

    新装了一个centos 5 11 xff0c yum一直没法用 xff0c 每次使用都是出现下图的提示 xff1a 在网上找各种解决方案 xff0c 都是网络没连上 xff0c DNS有问题之类的 直到找到一篇帖子提到centos 5所有资
  • 远程连接——SSH

    简介 SSH xff08 Secure Shell xff09 是一种安全通道协议 xff0c 主要用来实现字符界面的远程登录 远程 复制等功能 SSH 协议对通信双方的数据传输进行了加密处理 xff0c 其中包括用户登录时输入的用户口令
  • Ubuntu 安装LLVM

    在部署galois时 xff0c 需要安装libllvm gt 61 7 0 with RTTI support xff0c 但是如果使用直接编译好的 xff0c 则并不会对RTTI提供支持 因此选择下载源代码自己编译安装 xff0c 并设
  • 关于ubuntu分区挂载

    转载自https blog csdn net u010409517 article details 88081911 一 硬盘分区 1 查看硬盘及所属分区情况 sudo fdisk lu 如图显示 xff0c 我们对200G硬盘进行分区 x

随机推荐