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存储以及数据库存储.当然, ...
随机推荐
- [Jquery]如何绑定相同id的所有元素?
Jquery中相同的id不能用$()获得,只能获得第一个匹配的元素. 原因:id不可重复 解决方案: 方案1: 通过 $("input[id='xxxx']"); 可以选择多个相同 ...
- linux的打开文件标志O_CLOEXEC
当没有这个标志,打开文件时,得到的fd, 将会被子进程继承,并且子进程会获得这个fd的读写能力. 往往父进程打开的文件,不希望子进程读写,所以,子进程启动之后,可以手动关闭fd. 但是关闭fd的操作不 ...
- D_GLIBCXX_USE_CXX11_ABI
gcc ABI兼容 设置=0,表示使用C++11之前的ABI 反之,使用C++11的ABI
- C#中检测代码执行时间
使用System.Diagnostics.Stopwatch, using System; using System.Diagnostics; using System.Threading; clas ...
- Markdown 基础语法 备忘录
在vscode中使用Markdown先要安装一些插件: Markdown Preview Enhanced Paste Image LimfxCodeEX Code Spell Checker 一级标 ...
- vue element 可编辑表格行内验证
<template> <div class="page-layout rataMdel"> <el-button type="primary ...
- @Html.DropDownList,绑定默认值
后端代码: List<Area> list = new List<Area> { new Area { Id=1,Name="北京"}, new Area ...
- Vue后台管理项目中解决需要配置多个端口号问题
背景 登录接口:http://39.98.123.211:8170/ 商品接口:http://39.98.123.211:8510/ 可见前面是地址是一致的,但是端口号不一样. 这就会导致,登录进得去 ...
- gitea 常用命令
gitea 常用命令 配置文件位置 /home/custom/conf/app.ini cd //home启动nohup ./gitea web & [root@iZ4jbz0xj0nx7 ...
- BBS 项目分析
项目开发流程 # 1.核心 文章的增删改查 # 2.表关系分析 确定表的数量,确定表的基础字段,最后确定表的外键字段 # 3.表 1.用户表 2.个人站点表 3.文章表 4.文章分类表 5.文章标签表 ...