生成私钥 p q rsa_【安全】理解 RSA 算法

Public-key Crytography简介

Public-key cryptography (公开密钥加密) 又称 asymmetric cryptography (非对称加密),即存在两把不同的密钥,分别称为公钥 Pu 和私钥 Pr,公钥通常用来加密明文 M,只有私钥才能解密密文 C,如果用 E 和 D 分别表示加密和解密算法,那么有:

C = E(Pu, M)
M = D(Pr, C)
下图(摘自维基百科)形象的表述了加密和解密流程:

40281b2fd38d6399f27563acdcefa8f1.png     19b54b2685058d8d1182e1eef7d3ec8c.png

传统的对称加密需双方共享相同的密钥,通信安全很大程度依赖双方是否能妥善的管理密钥。公开密钥加密发明是密码学最为重要的里程碑之一,它从数学的角度保证了通信安全。公开密钥加密体系有三大范畴:

1、Encryption/Decryption:即加密与解密,发送方用接收方的公钥加密消息;
2、Digital Signature:数字签名,发送方用私钥加密消息摘要生成签名,保证消息的完整性和可靠性;
3、Key Exchange:安全的交换密钥,通常用于交换对称加密的密钥。

公钥加密有多种算法,最有名的的是 RSA 和 DH 等,如下:

+----------------+-----------------------+-------------------+--------------+
| Algorithm | Encryption/Decryption | Digital Signature | Key Exchange |
+----------------+-----------------------+-------------------+--------------+
| RSA | Yes | Yes | Yes |
+----------------+-----------------------+-------------------+--------------+
| Deffie-Hellman | No | No | Yes |
+----------------+-----------------------+-------------------+--------------+
| Elliptic Curve | Yes | Yes | Yes |
+----------------+-----------------------+-------------------+--------------+
| DSS | No | Yes | No |
+----------------+-----------------------+-------------------+--------------+
数论知识

RSA 算法前,先介绍一些必要的数论领域知识。

欧拉函数

对正整数 n,欧拉函数 指小于 n 且与 n 互质的正整数数目,通常用 φ(n) 表示。

对于素数 p,有:
φ(p) = p - 1
对于素数 p, q 有:
φ(p * q) = φ(p) * φ(q) = (p - 1) * (q - 1)
如 φ(21) = 2 * 6 = 12

欧拉定理

对于正整数 a 和 n,欧拉定理有:

a^φ(n) mod n = 1
即:a^(φ(n) + 1) mod n = a mod n

模反元素

当 a, n 互质,一定存在模仿元素 b,使得:

a * b mod n = 1
由欧拉定理可知:
1 = a^φ(n) mod n = a * a^(φ(n) - 1) mod n
可求得一个 b = a^(φ(n) - 1),满足 a * b mod n = 1
RSA算法原理

RSA 简介

RSA 算法于 1977 由 Ron Rivest,Adi Shamir 和 Leonard Adleman 提出,是目前应用最为广泛的非对称加密算法。极大数分解难题是 RSA 算法可靠性的根基,即给定两个大素数 p 和 q,其中 n = p * q,有:
已知 p、q,求 n = p * q 很容易
已知 n,求 p、q,并且 p * q = n 很困难

RSA 原理

对于明文 M 和 密文 C,且 M < n, C < n,其加密和解密过程如下:

C = M^e mod n
M = C^d mod n
上述公式可表述为:
M = M^(e * d) mod n
根据欧拉定理可知:
只需 e * d mod φ(n) = 1,即可满足上式
如果我们选取素数 p, q,那么:
n = p * q 容易计算
φ(n) = (p - 1) * (q - 1) 容易计算
很容易选取一个正整数 e,e 和 φ(n) 互质
当 e 和 φ(n) 互质时:
由欧拉定理可很容易算出一个模反元素 d,满足 e * d mod φ(n) = 1

RSA 流程

Cryptography and Network Security 形象的描述了 RSA 流程:

+-------------------------------------------------------------------------------+
| Key Generation |
| |
| Select p, q p and q both prime, p != q |
| Calculate n = p * q |
| Calculate φ(n) = (p - 1) * (q - 1) |
| Select integer e e is relatively primte to φ(n) |
| Calculate d (d * e) mod n = 1 |
| Public key PU = {e, n} |
| Private key PR = {d, n} |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Encryption |
| |
| Plaintext M M < n |
| Ciphertext C C = M^e mod n |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Decryption |
| |
| Ciphertext C C |
| Plaintext M M = C^d mod n |
+-------------------------------------------------------------------------------+
欢迎关注交流探讨!

e2548f15786c1601c1550a56b280fa7b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java:如何创建轻量级数据库微服务

基于云的Java数据库应用程序的数量每分钟都在增加。 许多组织部署了数百甚至数千个微服务实例。 但是&#xff0c;相对于运行时环境&#xff0c;大多数应用程序会带来惊人数量的不必要开销。 反过来&#xff0c;这会使应用程序运行更慢&#xff0c;运行成本更高。 在本文中&am…

垃圾分类毕设java程序_垃圾“拍一拍”,分类不用愁!生活垃圾分类查询小程序上线啦...

垃圾种类太多&#xff1f;分类容易搞混&#xff1f;乐清人 注意啦&#xff0c;拿起手机就能查&#xff01;11月6日&#xff0c;生活垃圾分类查询系统登陆乐清市综合行政执法局官方微信公众号&#xff0c;输入垃圾名称即可快速了解垃圾所属哪一类&#xff0c;还有拍照识别查询&a…

带有Prometheus的弹簧靴和千分尺第5部分:旋转Prometheus

以前&#xff0c;我们获得了Spring Boot Application适配器&#xff0c;以便为Prometheus公开端点。 该博客将重点介绍如何设置和配置Prometheus&#xff0c;以便为Spring Boot端点提供服务器。 因此&#xff0c;让我们开始使用docker来启动Prometheus服务器。 在继续进行Pr…

允许跨域访问_PHP设置多域名允许跨域访问

php中文网最新课程 每日17点准时技术干货分享 针对 PHP 语言设置多域名允许跨域访问 服务器变量: 服务器变量存储在 $_SERVER 数组中,在这个数组中有一个特殊的键值:HTTP_ORIGIN。 这个键只在跨域的时候才会存在值,同源时为空字符串 响应头设置允许某域名访问:access-cont…

python函数的作用降低编程复杂度_Python函数式编程

lambda本文将介绍Python中函数式编程的特性。在对函数式编程的概念有了了解后&#xff0c;本文会介绍iterators和generators等语言特性&#xff0c;还有itertools和functools等相关的库。函数式编程本章节将会介绍函数式编程的一些基本概念&#xff1b;如果只是对Python的语言特…

Apache Camel 3.1 –即将推出更多骆驼核心优化

希望一切都很好&#xff0c;您可以安全进入2020年。 Camel团队已经在忙于开发下一个Camel 3.1版本。 目标之一是继续优化骆驼核心&#xff0c;这一次我们花了一些时间来寻找路由引擎中的一些热点。 我们所研究的方面之一也是在Camel路由的每个消息中发生的对象分配。 JVM本身…

判断字符为空_算法题:字符串转换整数 (atoi)

题目描述题解分析他人更优解一、题目描述二、题解import math class Solution:def myAtoi(self,str):str str.strip() #去除字符串两边的空格if len(str) 0: return 0 #如果字符串为空返回0if not str[0].isdigit() and str[0] ! - and str[0] ! : #判断第一个字符是…

python 3.5.2设计页面_怎么解决win10系统搭建Python 3.5.2开发环境的处理方案

今天小编告诉大家如何对win10系统搭建Python 3.5.2开发环境进行设置&#xff0c;可能很多用户都不知道怎么对win10系统搭建Python 3.5.2开发环境进行设置&#xff0c;但当我们遇到对win10系统搭建Python 3.5.2开发环境进行设置的问题怎么办呢&#xff1f;遇到这种情况不要着急&…

Eclipse系列的隐藏宝藏-2019年版

Eclipse Collections是一个开放源代码Java Collections框架。 在此博客中&#xff0c;我将演示该框架的五个鲜为人知的功能。 我在去年的Java Advent Calendar中发布了一个类似的博客 。 请参阅博客末尾的资源以获取有关该框架的更多信息。 1. countBy() &#xff1a;要查找特…

mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云...

http://docs.mongoing.com/manual-zh/tutorial/perform-two-phase-commits.html要么操作全都执行&#xff0c;要么都不执行&#xff0c;不能执行一半&#xff0c;改了几条数据了&#xff0c;看哎哟好像不对&#xff0c;那扔着吧。Consistency 在数据库领域的意思跟在分布式系统…

picturectrl控件中加载图片并显示_在 CRA 中使用 webp 图片提升加载性能

webp 是 google 提倡的一种新的 image 格式&#xff0c;意在为 web 提供体积更小的图片格式。通常情况下&#xff0c;无损压缩可以减小 25%-35% 的体积&#xff08;有例外情况&#xff0c;反而会增大体积&#xff0c;但是是因为转换图片格式不兼容引起的&#xff09;&#xff0…

怎么打开网卡rss_RSS 进阶篇:Huginn - 真·为任意网页定制 RSS 源(PhantomJs 抓取)...

定制网页RSS源主要有FEED43和Huginn两种方法。FEED43&#xff1a;简单免费&#xff0c;六小时抓取一次&#xff0c;每次抓取20条静态页面。使用攻略- RSS 入门篇&#xff1a;FEED43&FeedEx-为静态网页定制 RSS 源2. Huginn&#xff1a;自由度高&#xff0c;可设定抓取频率、…

编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)

编写junit 测试最近&#xff0c;我为一个小型个人项目编写了很多Jasmine测试。 我花了一些时间才终于感到正确地完成了测试。 在此之后&#xff0c;当切换回JUnit测试时&#xff0c;我总是很难过。 由于某种原因&#xff0c;JUnit测试不再那么好&#xff0c;我想知道是否有可能…

python4 什么时候_Python4要来了?快来看看Python之父怎么说

大家好&#xff0c;我是菜鸟哥&#xff0c;今天跟大家一起聊一下Python4的话题&#xff01;从2020年的1月1号开始&#xff0c;Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的发展&#xff0c;关于Python4的发布也逐渐的成为了大家…

python类成员变量_Python 类变量和成员变量

Python 类变量和成员变量类与对象的方法我们已经讨论了类与对象的功能部分&#xff0c;现在我们来看一下它的数据部分。事实上&#xff0c;它们只是与类和对象的名称空间 绑定 的普通变量&#xff0c;即这些名称只在这些类与对象的前提下有效。有两种类型的 域 ——类的变量和对…

JDK 14 – JEP 361从预览中切换表达式

在我以前的文章中 &#xff0c;我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息。随后&#xff0c;在JDK 13中提出了一些更改&#xff0c;例如使用yield关键字从switch块返回值并在预览中发布。 在即将于明年3月在GA上发布的即将发布的JDK 14版本中&…

输入一个正整数求所有素数因子_一个数如果恰好等于它的因子之和,这个数就称为完数。编写应用程序求1000以内所有的完数...

运行截图&#xff1a;代码import java.util.*;public class wanshu {public static void main(String args[]) {int sum 0,i,j,k,m 0;System.out.println(" 完数有&#xff1a;");for( j 2; j < 1000 ; j){for ( i 2 ; i < j; i){if( j%i 0) //此判…

安卓禁用硬件加速_Android硬件加速详解

从Android3.0(API Level 11)开始&#xff0c;支持硬件加速&#xff0c;可充分利用GPU的特性&#xff0c;使得界面渲染更加平滑。但是硬件加速自身并非完美&#xff0c;在某些Webview版本上&#xff0c;比如Android5初期的一些rom上的Webview版本是chrome37、38版本&#xff0c;…

mac svn工具_程序员或产品经理,这些Mac的效率工具一定不要错过

工欲善其事必先利其器!用好工具能很大的提高我们的工作效率&#xff0c;尤其是程序员和产品经理等。今天给大家介绍一些好用的工具随时记下闪现的灵感人的一天中大脑会产生大约6万个想法, 其中有不少优秀的 idea. 如果我们能学会捕捉哪怕是部分灵感, 也将会收获巨大. 因此工作中…

案例 github_github 项目搜索技巧-让你更高效精准地搜索项目

作者&#xff1a;Suwanbinwww.cnblogs.com/suwanbin/p/12113751.htmlgithub 搜索技巧参考自 B站 up 主 CodeSheep 的视频【如何高效地在网上找开源项目做&#xff01;在职程序员实际演示一波视频教程操作】&#xff0c;然后写着写着一好奇就去看文档了现在这篇博客相当于官方文…