【非对称加密算法】RSA算法
一、非对称加密算法
非对称加密算法使用了两个不同的密钥:公钥和私钥。公钥是公开的,可以被任何人使用,而私钥是只有特定的人能够使用的。这种算法的加密和解密过程使用不同的密钥,因此称为非对称加密算法。
在非对称加密算法中,使用公钥进行加密,私钥进行解密。因此,它的主要优点是可以实现安全的通信,因为即使公钥被攻击者获得,攻击者也无法破解消息,因为只有使用私钥才能解密。
非对称加密算法常用于网络安全、电子邮件通信、电子支付和数字签名等领域。其中最常见的非对称加密算法是RSA算法。
二、RSA算法
该算法的基本思想是将要加密的数据转化为一个数字,然后通过公钥进行加密。只有私钥才能解密这个加密后的数字,将其转化为原始的数据。加密和解密采用的是不同的密钥,公钥可以由任何人获得,而私钥只能由算法的使用者获得。
RSA算法的应用场景包括:身份验证、加密通信、数字签名、SSL/TLS证书、VPN等。
(1)具体使用
public class Demo04 {public static void main(String[] args) throws Exception {// 明文:byte[] plain = "Hello, encrypt use RSA".getBytes("UTF-8");// 创建公钥/私钥对Human hong = new Human("小红");Human ming = new Human("小明");// 小明使用小红的公钥进行加密// 1.获取小红的公钥PublicKey hongPublicKey = hong.getPublicKey();System.out.println(String.format("小红的public key(公钥): %x", new BigInteger(1, hongPublicKey.getEncoded())));// 2.使用公钥加密byte[] encrypted = ming.encrypt(plain, hongPublicKey);System.out.println(String.format("encrypted(加密): %x", new BigInteger(1, encrypted)));// 小红使用自己的私钥解密:// 1.获取小红的私钥,并输出PrivateKey hongPrivateKey = hong.getPrivateKey();System.out.println(String.format("小红的private key(私钥): %x", new BigInteger(1, hongPrivateKey.getEncoded())));// 2.使用私钥解密byte[] decrypted = hong.decrypt(encrypted);System.out.println("decrypted(解密): " + new String(decrypted, "UTF-8"));}
}//用户类
class Human {// 姓名String name;// 私钥:PrivateKey privatekey;// 公钥:PublicKey publickey;// 构造方法public Human(String name) throws GeneralSecurityException {// 初始化姓名this.name = name;// 生成公钥/私钥对:KeyPairGenerator kpGen=KeyPairGenerator.getInstance("RSA");kpGen.initialize(1024);KeyPair kp=kpGen.generateKeyPair();this.privatekey=kp.getPrivate();this.publickey=kp.getPublic();}// 把私钥导出为字节public PrivateKey getPrivateKey() {return this.privatekey;}// 把公钥导出为字节public PublicKey getPublicKey() {return this.publickey;}// 用公钥加密public byte[] encrypt(byte[] message,PublicKey publickey) throws GeneralSecurityException {// 使用公钥进行初始化Cipher cipher=Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publickey); //使用公钥进行初始化return cipher.doFinal(message);}// 用私钥解密:public byte[] decrypt(byte[] input) throws GeneralSecurityException {// 使用私钥进行初始化Cipher cipher=Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE,this.privatekey); //使用私钥进行初始化return cipher.doFinal(input);}
}
只用使用同一个公钥-私钥对才能正常加解密!!!
相关文章:
【非对称加密算法】RSA算法
一、非对称加密算法 非对称加密算法使用了两个不同的密钥:公钥和私钥。公钥是公开的,可以被任何人使用,而私钥是只有特定的人能够使用的。这种算法的加密和解密过程使用不同的密钥,因此称为非对称加密算法。 在非对称加密算法中…...
【滑动窗口】438. 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词 滑动窗口解法 创建两个Map 一个记录实际需要的有效字符 另一个记录窗口内的有效字符个数初始化need每次遍历一个字符 判断是不是有效字符 如果是 更新window 另外判断window中有效字符的个数是不是等于need中有效字符的个数 如果是更新valid…...

【PowerQuery】Excel 一分钟以内刷新PowerQuery数据
当需要进行刷新的周期如果小于一分钟,采用数据自动刷新就无法实现自动刷新的目标。那就没有办法了吗?当然不是,这里就是使用VBA来实现自动刷新。这里实现VBA刷新的第一步就是将当前的Excel 保存为带有宏的Excel 文件,如果不带宏则无法运行带有宏代码的Excel文件,保存过程如…...

【C语言】用冒泡排序实现my_qsort
大家好,我是苏貝,本篇博客带大家了解如何用冒泡排序实现my_qsort,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一. 前言二. 冒泡排序三. 4个参数3.1 第一个参数void* base3.2 第二个参数…...
【css】深入理解flex属性
参考文章: 深入理解Flex属性 flex弹性布局教程-05-项目属性flex-shrink flex:flex-grow flex-shrink flex-basis flex:0 1 0 如何计算flex布局,有flex-shrink和flex-grow的情况下,每个元素的大小 flex-grow生效公式如…...

前端项目开发流程
一 参加需求对称(评审)会议 时间:在产品设计完成以后,进入正式的开发流程之前 组织者:产品&项目经理 目的:统一大家对产品的认识,及时发现产品设计缺陷,尽可能降低后续修改需求的频率 参与者ÿ…...
MybatisPlus逆向工程入门指南:让你的开发更高效、更简洁、更优雅
学会了,可以看看这篇文章:更新中~ 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下…...

通用商城项目(下)
记录一些踩坑的地方,以及理顺一些思路。 通过管理系统页面,完成商品属性分组和商品属性(基本属性)关联维护 属性表 与 属性组表 的功能完善:显示属性组与属性表的一对多关系 前端 1. 引入组件,是否显示使…...

k8s集群使用ingress转发grafana服务
文章目录 前言一、思路二、grafana准备1. grafana-configmap.yaml2. grafana.yaml 三、ingress准备1. ingress.yaml2. grafana-externalname.yaml3. ingress-nginx-controller 四、 本机host文件准备五、访问测试 前言 在k8s集群中,使用ingress服务转发grafana的页…...
MongoDB的备份和恢复
工具 mongodump 和 mongorestore是MongoDB自带的备份恢复工具。 参考文章 ## https://blog.csdn.net/GUDUzhongliang/article/details/131915625## https://blog.csdn.net/mingongge/article/details/130695422 备份 mongodump 参数 -h, --host<hostname> …...

Pytorch学习笔记(GPU训练)
GUP训练 配置pytorch的gup版本主要是在网络模型、输入和标记的数据、损失函数 方式一 直接.cuda()调用,在原有的模型训练代码中的网络模型、输入和标记的数据、损失函数部分直接调用即可 方式二 事先定义好设备device,然后直接.to(device)调用,在原…...

一款开源的shell脚本分析工具
大家好,今天分享一款开源工具--shellcheck。 shellcheck 简介 今天发现的一款神器,如果你日常会接触到shell脚本,或者说自己需要写一些shell脚本,那么强烈建议你用下这个工具。 shellcheck一个静态的shell脚本分析工具…...
HTML <video> 标签
实例 一段简单的 HTML5 视频: <video src="movie.ogg" controls="controls"> 您的浏览器不支持 video 标签。 </video>定义和用法 <video> 标签定义视频,比如电影片段或其他视频流。 浏览器支持 元素ChromeIEFirefoxSafariOpera&l…...

mac 本地运行 http-proxy-middleware ,请求超时
const http require(http)"/customer": {target: "http://10.10.111.192:8080/",// target: "http://user.jinfu.baohan.com/",changeOrigin: true, // 是否启用跨域// 解决mac 代理超时问题headers: {Connection: "keep-alive"},// …...
【Effective Python】读书笔记-05类与接口
1. 让组合起来的类来实现多层结构,不用使用嵌套的内置类型 2. 让简单的接口接收函数,而不是类的实例 from collections import defaultdictcurrent {a: 1,b: 2,c: 3, }add_to_current {f: 4,e: 5, }def increment():count 0def missing():nonlocal …...

【办公自动化】用Python在Excel中查找并替换数据(文末送书)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

python学习随笔3
range的使用 range()在python很常用,可以进行初始化和遍历等。 # range(st,ed) # [st, ed)# range(st,ed,step) # range(st, ed, step) i,i step, i 2 * step ... () < ed切片 跟range类似。 ll[st:ed:step]容器 元组 python中的元组中内容不可以进行更…...
《TCP/IP网络编程》阅读笔记--epoll的使用
1--epoll的优点 select()的缺点: ① 调用 select() 函数后针对所有文件描述符的循环语句; ② 调用 select() 函数时需要向操作系统传递监视对象信息; epoll()的优点: ① 无需编写以监视状态变化为目的的针对所有文件描述符的循环语…...
Python 递归函数
视频版教程 Python3零基础7天入门实战视频教程 在一个函数体内调用它自身,被称为函数递归。函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。 实例,求123…100的和,用递归实现。数学…...
Java实现计算两个日期之间的工作日天数
需求: 需要在后端实现 计算当前日期与数据库内保存的日期数据之间相隔的工作日数目 实现 import java.time.DayOfWeek; import java.time.LocalDateTime;public class WorkdaysCalculator {public static void main(String[] args) {String givenDateTimeStr &q…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...