RSA非对称加密(简单理解)

2024-05-16 08:32

本文主要是介绍RSA非对称加密(简单理解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引用https://www.zhihu.com/question/25912483
我举个例子说下我的理解哈:
有A、B两人,A有公钥PK和私钥SK。假设B已经拿到了A的公钥,现在A要从B处获取一个机密文件,那么会话过程是:
1)A对B说,请把某某机密文件发过来;
2)B用A的公钥加密该机密文件,发往A。
这第1步中,因为A没有B的公钥,所以只能明文。但为了防止被造假,所以需要A签名。因为B已经有A的公钥,所以第1步就用A的私钥SK签名,然后B用A有公钥PK验证签名。(若验证失败,说明要么B之前拿到的PK是假的,要么A这个请求是冒充的,总之B是不能把该机密文件发出去的。)这样是否可行,是不是能够杜绝全部风险?

我的理解:
提供一对(1个密钥1个公钥)
A使用自己的私钥加密签名,让B发送文件过来,B持有的公钥进行验证。
结果:
1. 验证通过,执行A的请求
2.验证不通过,不发送文件
B使用自己的公钥加密文件, 发送给A。A拿到B的文件,使用自己持有的私钥进行解密文件,如果解密的文件能够被A识别,说明该文件是解密成功,也就是说明该文件是通过公钥加密。

扩展知识
举个异或的例子,只是说明加密的最基础的情况
所有的文件在计算机都是二进制存储,也就是0010101010的数字

  1. 如果你有一个数字
    原始:000111110010101010

  2. 使用了异或(相同为1,不同为0)加密
    加密操作(用户A)

相同为1,不同为0
000111110010101010(源数据)
111111111111111111(异或的加密二进制)
------------------
111000001101010101(这里类似加密后的结果)

解密操作(用户B)

111000001101010101(获取加密后的串)
111111111111111111(异或的加密二进制)
------------------
000111110010101010(还原数据)

这里的111111111111111111可为任何二进制

最后用户B知道了用户A想告诉他的信息

真实情况远比这个复杂。这里只是做一个简单的说明。

注:如果说的不对,希望告知,共同进步。

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



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

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态