Crypto入门 (九) easy_RSA
前言:
建议看这篇随笔之前先看入门(8)数论基础,简单学习下,有利于你看懂后面得算法原理,链接给出:https://www.cnblogs.com/yuanchu/p/13494104.html
easy_RSA:
easyRSA属于一个让你去了解RSA算法得一个题,可能很多人都是通过工具解出来得,但我觉得学习是学习知识,工具是次要得,要探究问题本质:所以我们一起来了解下现代密码学RSA把,RSA属于非对称密钥加密,指的是公钥和私钥不一样,通过构建数学上得难题(因式分解)来进行增大解密难度
题目:在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17 求解出d
先了解一下该算法,下面贴链接:https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95,这里我们先只讲公钥和私钥得产生,

我们需要求得是d,由之前推导得 引理可知道,e存在r得模逆元,当且仅当 gcd(e,r) = 1 我们可以简单得验证一下,给出python代码
1 import math
2
3 # 在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
4 # 求解出d
5
6 p=473398607161
7 q=4511491
8 e=17
9 r=(p-1)*(q-1)
10
11 if math.gcd(e,r) == 1:
12 print('可以求出d')
结果是可以得(当然得可以不然没法算d,这里只是小小验证一下),d其实有很多个解,我们知道这题 ed mod r =1 那么只需要ed = kr +1 即可,k可以取任意整数值,然而d也为整数,所以只需要
(kr + 1) %e = 0 即可,此时 d = (kr +1) /e ,好了,既然我们思路有了就可以写代码了:
1 import math
2
3 # 在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
4 # 求解出d
5
6 p=473398607161
7 q=4511491
8 e=17
9 r=(p-1)*(q-1)
10
11 def Euler_d(e,r,k):
12 k += 1
13 if math.gcd(e,r) == 1:
14 while True:
15 if (k*r + 1)%e == 0:
16 #直接用d=(k*r+1)/e会丢失精度
17 (d,_) = divmod((k*r +1),e)
18 break
19 else:
20 d ='不可以计算出d'
21 print(d)
22 return d
23
24
25 print(Euler_d(e,r,0))
26
然后给出我们得结果:
1 125631357777427553
它就是最小得d得值了,然后提交就ok了
参考链接:
https://www.runoob.com/python/python-func-divmod.html
Crypto入门 (九) easy_RSA的更多相关文章
- 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...
- C#基础入门 九
C#基础入门 九 集合 对于很多应用程序,需要创建和管理相关对象组,有两种方式可以将对象分组,一是创建对象数组,如 object[] obj=new object[3]{1,2.33,"st ...
- cesium编程入门(九)实体 Entity
cesium编程入门(九)实体 Entity 在cesium编程入门(五)绘制形状提到过添加实体的方法,这一节聊一聊实体相关的一些内容: 先来看 Entity 的各个属性 id 唯一标志,如果没设置, ...
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)
转自http://www.cppblog.com/ArthasLee/archive/2010/12/01/135186.html 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后 ...
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
最先附上 下载地址 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作. 笔 ...
- 数列分块入门九题(三):LOJ6283~6285
Preface 最后一题我一直觉得用莫队是最好的. 数列分块入门 7--区间乘法,区间加法,单点询问 还是很简单的吧,比起数列分块入门 7就多了个区间乘. 类似于线段树,由于乘法的优先级高于加法,因此 ...
- 数列分块入门九题(二):LOJ6280~6282
Preface 个人感觉这中间的三题是最水的没有之一 数列分块入门 4--区间加法,区间求和 这个也是很多数据结构完爆的题目线段树入门题,但是练分块我们就要写吗 修改还是与之前类似,只不过我们要维护每 ...
- 数列分块入门九题(一):LOJ6277~6279
Preface 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组...... ...
- TypeScript入门九:TypeScript的模块
关于TypeScript模块的基本使用方法 Ts的模块化语法与ES6的语法基本是一致(关于一些细节特性没有测试,请各自自行测试),然后再由tsconfig.json的module字段来描述转码类型,具 ...
- Android入门(九)文件存储与SharedPreferences存储
原文链接:http://www.orlion.ga/578/ Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库存储.当然, ...
随机推荐
- SQL in查询字段为Guid拼接处理办法
场景一:在我们写SQL脚本执行普通的Id 为Int,Long 类型查询为 譬如: select *from Table where id in (1,2,3); 场景二:SQL in 查询,当查询字段 ...
- win7安装AutoCAD2019
1.Win7专业版64位先安装SP1补丁 2.根证书下载 MicrosoftRootCertificateAuthority2011.cer 链接:http://go.microsoft.com/fw ...
- Hub
public class StreamHub : Hub { public ChannelReader<string> ReadLogStream() { var channel = Ch ...
- SPI接口(续三)
在SPI接口中,判断传输的数据位上电平的高低是通过时钟来衡量的,根据时钟的上升沿/下降沿和数据电平的保持/更改,可以组合出4种方式,具体如下图所示. 从上图中可以看出,时钟相位CPHA决定传输的数据电 ...
- NOIP2022 游记
无论结局如何,我都曾经来过. Day -1 zak 模拟赛,被殴打了. Day 0 上午 补模拟赛题. 下午 补模拟赛题. 徐老师过来分配了第二天下午造数据名单. 我造 T2.希望不会太难.(flag ...
- new关键字解析
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例.new 关键字会进行如下的操作: 创建一个空的简单JavaScript对象(即{}): 链接该对象(即设置该对象的构造函数 ...
- QCheckBox CSS样式
QCheckBox:!hover { color:white; border-radius:10px; border:1px solid rgb(170, 170, 127); background- ...
- 每日一抄 Go语言死锁、活锁和饥饿概述
DeadLock package main import ( "fmt" "runtime" "sync" "time" ...
- 开发谷歌插件--web3钱包(一)
之前开发了一款谷歌插件,因为很简单没有什么好记录的. 这次记录下一款新的钱包功能的插件,其中遇到的问题,以及解决方案. 首先遇到的问题就是唤醒: 小狐狸钱包应该都用过,点击图标就会唤起登录页面(pop ...
- developer mode
PS C:\Windows\system32> reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ...