RSA公开密钥系统

2024-01-05 07:50
文章标签 系统 rsa 公开密钥

本文主要是介绍RSA公开密钥系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 先弄清对称密码体制和非对称密码体制(系统)
    对称密码体制就是加密和解密都使用同一个密钥,对称密钥系。非对称密钥密码体制,其是将公钥与私钥分离,用公钥加密明文形成密文,数据以密文形式传播,用私钥解密密文获得明文;如果是使用私钥加密,也必须使用公钥解密,公钥和私钥是相对的,对外公开的加密密钥是公钥,自己私有不公开的解密密钥就是私钥。

    非对称加密描述图:
    小明与小红之间进行秘密通信,小明先把自己的公钥公开获者发给小红,小红利用该公钥进行加密得到密文,密文传输到小明那里,小明利用自己的私钥进行解密得到明文。在这个过程中,小明的私钥是自己私有的不公开,也不用进行传输。即使其他人得到了密文和公钥,没有私钥也是无法进行解密得到明文的。

公开
获取
获取
加密
生成
传输
私有
解密
得到
获得
小明
公钥
其他人
小红
明文
密文
密文
私钥
明文
  1. RSA是一个非对称密码体制(系统)
    RSA是目前使用最广泛的公开密钥密码系统,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。其最大的缺点就是加密速度,因为进行的都是大数运算,越大的数就越安全,当然相应的加密和解密时间就更长。一般推荐使用1024位的二进制素数,甚至使用2048位4096位也是有的。这么大的数,虽然计算机的运算速度很快,但是依然比较费时,所以RSA一般只用于少量数据的加密。目前人类已经能够分解长达100多位十进制的素数。

  2. RSA算法的具体描述如下:
    (1)任意选取两个不同的大素数p和q计算乘积在这里插入图片描述

    (2)任意选取一个大整数e,满足(gcd是求最大公因数运算)在这里插入图片描述
    整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用) ;
    (3)确定的解密钥d,满足(mod是求余运算) :在这里插入图片描述
    即:在这里插入图片描述
    K ≥ 1 是一个任意的整数;所以,若知道e和ψ(n) ,则很容易计算出d ;
    (4)公开整数n和e,秘密保存d ;
    (5)将明文m(m<n是一个整数)加密成密文c,加密算法为:
    在这里插入图片描述

    (6)将密文c解密为明文m,解密算法为:
    在这里插入图片描述

    然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 。

  3. RSA是以单向函数为基础
    单向函数:对于每一个输入,函数值都容易计算,但是给出一个随机输入的函数值,算出原始输入却比较困难。比如RSA系 统中的两个大素数p和q,一般RSA使用的都是二进制512位以上的素数,推荐使用1024位。如果安全要求更高甚至可以使用2048位或者4096位的素数。计算n=pq很简单,但是如果给定n,假设使用p和q是1024位的,那么n就是一个1024*1024位的一个数,要分解n计算出p和q,这就非常非常非常耗时了。
    所以,单向函数的这种特性,保证了公开密钥系统的安全性,由此也可以知道,任何单向函数都可以作为某种公开密钥系统的基础。

这篇关于RSA公开密钥系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

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

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

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处