python gmpy2模块、yafu的简单学习记录(RSA向)
最近刷reverse经常碰到偏密码学的题,其中最典型的就是RSA,简单科普一下RSA。
RSA属于非对称密钥的一种,由公钥和私钥这一对密钥组成。假设小红想传输一段信息给小白,她只需要用公钥对信息进行加密,然后把加密过的信息传给小白,由于有且仅有私钥才能对密文进行解密,即使在传输过程中密文被第三者截取,也不会导致信息泄露,从而只有私钥持有者小白和发送者小红才能知道原始信息。
要做到公钥加密,私钥解密这个神奇的操作,RSA便是其中的一种方式。RSA原理涉及到复杂高等数学知识。
简单来说,需要两个质因数p,q满足phi(N) = (p-1)(q-1),那么有N = p * q 。还需要一个定义叫e的质数为公钥,满足gcd(e,phi(N)) = 1(e和phi(N)公约数为1)
根据神奇的数学原理,有ed mod(phi(N)) = 1,这里d定义为私钥,d又叫做e的逆元。
假设原文为m,密文为s,将原文加密过程:s = m ^ e mod N,解密过程m = s ^ d mod N
大概了解了rsa的加解密流程,来到做题的重点部分,往往题目会告诉解题人e和N以及密文s(告知其它值也同理),要得到原文m的话,需要知道私钥d,而欲解出d,得知道phi(N),进而通过ed mod(phi(N)) = 1得解d。这个过程分为几个步骤。
- 1.用yafu进行大数分解,分解N为p * q,求phi(N)
yafu是一个命令行程序,百度安装好之后,在命令行里输入yafu factor(N),方可得p,q,phi(N) = (p-1) * (q-1)
拿 N = 103461035900816914121390101299049044413950405173712170434161686539878160984549为例
- 2.利用python gmpy2模块(python -m pip install gmpy2),求逆元d
# ed mod phi(N) = 1
import gmpy2
d = gmpy2.invert(e,phi(N))
至此,题目一般就攻破了。
python gmpy2模块、yafu的简单学习记录(RSA向)相关推荐
- HTML简单学习记录
文章目录 HTML简单学习记录 简介 HTML基本结构 网页基本标签 图像标签 链接标签 超链接 锚链接 功能性链接 行内元素和块元素 列表 表格 视频和音频 视频 音频 页面的简单布局 iframe ...
- python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图
Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...
- 【Python】 Python编程基础练习100题学习记录第七期(61~70)
1.此为GitHub项目的学习记录,记录着我的思考,代码基本都有注释. 2.可以作为Python初学者巩固基础的绝佳练习,原题有些不妥的地方我也做了一些修正. 3.建议大家进行Python编程时使用英 ...
- python小括号报错_Python学习记录:括号配对检测问题
Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...
- 【Python】 Python编程基础练习100题学习记录第二期(11~20)
1.此为GitHub项目的学习记录,记录着我的思考,代码基本都有注释. 2.可以作为Python初学者巩固基础的绝佳练习,原题有些不妥的地方我也做了一些修正. 3.建议大家进行Python编程时使用英 ...
- Python for Maya DCC工具插件开发学习记录(一)
参考学习链接 代码和上手难度比较简单,但是没有字幕- 18版的Maya官方API文档 关于python中的中文使用解决方法 写在最前面 干到啥就写点啥,不过也是从入门开始啦,暂定为第一篇吧.本次记录和 ...
- python argparse模块详解_python学习之argparse模块
一.介绍 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行参数. 我们很多时候,需要用到解析命令行参 ...
- 对python random模块的认识_Python学习_random模块使用
#!/usr/bin/python #-*- encoding:UTF-8 -*- #date:20180516 random模块的方法:随机生成想要的数字.字母等 '''随机函数,random生成的 ...
- java rgb yuv_RGB和YUV简单学习记录
RGB和YUV是一种颜色编码格式. 这里简单介绍一下RGB.YUV和HSV. 出处:一文读懂 YUV 的采样与格式 https://glumes.com/post/ffmpeg/understand- ...
最新文章
- 张仰彪第二排序法_C语言中的最常用的两种排序算法你知道吗?
- 经典不过时,回顾DeepCompression神经网络压缩
- [转] Nodejs 进阶:Express 常用中间件 body-parser 实现解析
- python中文昵称-python实例pyspark以及python中文显示
- 【错误记录】Android 应用 release 打包报错处理 ( 关闭语法检查 | 日志处理 | release 配置 )
- jdby mysql_06_dljd_mysql数据库常用操作
- 郑州志泽网络科技--SSH模拟试题
- 开源短地址_如何在短短5分钟内完成您的第一个开源贡献
- php手机关闭程序,php用手机关闭电脑的方法
- 年会宣布 996 后,那些保持沉默的人
- Linux之du命令
- sklearn knn 算法
- [译] JavaScript 中的私有变量
- 用python判断素数
- 案例|工业物联网解决方案·光伏电站
- 【Pixel刷机】记录一次Pixel 2 刷机, root
- android 粘性控件,RecyclerView 粘性标签库: 可结合 BRVAH 使用
- 部署Openstack-train版
- 算法复习——分治法重点问题
- android壁纸软件推荐,推荐四款主流安卓手机桌面美化软件评测