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存储以及数据库存储.当然, ...
随机推荐
- R语言码农的Scala学习心得
为了MLib,最近是铁了心要学好Spark.关注本博客的朋友应该知道我的主力语言是R,无论是训练模型还是做Elasticsearch,都是通过R脚本来操作的.之前的<通过 Spark R 操作 ...
- xd p3 搭建安全扩展
常见搭建平台脚本启用 常见平台java Python php jsp搭建要启用脚本 中间件(搭建平台):Apache IIS Tomcat Nginx 主机头值 即 域名 域名IP目录解析安全问题 域 ...
- rar 压缩解压
rar wget https://www.rarlab.com/rar/rarlinux-x64-612.tar.gz # 压缩文件 rar a -r test.rar file # 解压文件 unr ...
- git 初始化新的文件夹
1. tar xvf new_project.tar.gz 2. cd new_project 3. git config --global user.email "user.name@ ...
- mysql 消息表分区方案
首先先看消息表创建脚本 我们用hash分区 在字段 user_id 分成100个区 CREATE TABLE `messages` ( `id` int(10) unsigned NOT NULL A ...
- 项目_1.3_手写SpringMVC框架
初步修改项目 package com.hy.servlet; import java.io.IOException; import java.lang.reflect.InvocationTarget ...
- DataStructures 01 日期抽象类设计与实现
1.思维导图以及学习体会 1.1 思维导图 1.2 学习体会 比较大的一个感概就是学习数据结构必须要一步一步来,前期切不可跳过思考过程, 最好的办法还是每一步慢慢分析,写在纸上,初期就要慢慢分析慢慢来 ...
- ORACLE 创建只读用户
create user cxuser01 identified by test123 default tablespace USERS temporary tablespace TEMP; --创建 ...
- 第四章:基本Git概念(重点)
本章通过讨论Git的基本架构组成和一些重要概念,来探讨Git的不同之处和原因. 一: 基本概念 1.版本库. 1]Git版本库只是一个简单的数据库,包含所有用来维护与管理项目的修订版本和历史记录. 2 ...
- “Can't open file for writing”或“operation not permitted”的解决办法
linux使用vi命令修改一个文件内容的时候,发现无法保存,每次写完使用":q!"命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示: ...