最近刷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向)相关推荐

  1. HTML简单学习记录

    文章目录 HTML简单学习记录 简介 HTML基本结构 网页基本标签 图像标签 链接标签 超链接 锚链接 功能性链接 行内元素和块元素 列表 表格 视频和音频 视频 音频 页面的简单布局 iframe ...

  2. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

  3. 【Python】 Python编程基础练习100题学习记录第七期(61~70)

    1.此为GitHub项目的学习记录,记录着我的思考,代码基本都有注释. 2.可以作为Python初学者巩固基础的绝佳练习,原题有些不妥的地方我也做了一些修正. 3.建议大家进行Python编程时使用英 ...

  4. python小括号报错_Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  5. 【Python】 Python编程基础练习100题学习记录第二期(11~20)

    1.此为GitHub项目的学习记录,记录着我的思考,代码基本都有注释. 2.可以作为Python初学者巩固基础的绝佳练习,原题有些不妥的地方我也做了一些修正. 3.建议大家进行Python编程时使用英 ...

  6. Python for Maya DCC工具插件开发学习记录(一)

    参考学习链接 代码和上手难度比较简单,但是没有字幕- 18版的Maya官方API文档 关于python中的中文使用解决方法 写在最前面 干到啥就写点啥,不过也是从入门开始啦,暂定为第一篇吧.本次记录和 ...

  7. python argparse模块详解_python学习之argparse模块

    一.介绍 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行参数. 我们很多时候,需要用到解析命令行参 ...

  8. 对python random模块的认识_Python学习_random模块使用

    #!/usr/bin/python #-*- encoding:UTF-8 -*- #date:20180516 random模块的方法:随机生成想要的数字.字母等 '''随机函数,random生成的 ...

  9. java rgb yuv_RGB和YUV简单学习记录

    RGB和YUV是一种颜色编码格式. 这里简单介绍一下RGB.YUV和HSV. 出处:一文读懂 YUV 的采样与格式 https://glumes.com/post/ffmpeg/understand- ...

最新文章

  1. 张仰彪第二排序法_C语言中的最常用的两种排序算法你知道吗?
  2. 经典不过时,回顾DeepCompression神经网络压缩
  3. [转] Nodejs 进阶:Express 常用中间件 body-parser 实现解析
  4. python中文昵称-python实例pyspark以及python中文显示
  5. 【错误记录】Android 应用 release 打包报错处理 ( 关闭语法检查 | 日志处理 | release 配置 )
  6. jdby mysql_06_dljd_mysql数据库常用操作
  7. 郑州志泽网络科技--SSH模拟试题
  8. 开源短地址_如何在短短5分钟内完成您的第一个开源贡献
  9. php手机关闭程序,php用手机关闭电脑的方法
  10. 年会宣布 996 后,那些保持沉默的人
  11. Linux之du命令
  12. sklearn knn 算法
  13. [译] JavaScript 中的私有变量
  14. 用python判断素数
  15. 案例|工业物联网解决方案·光伏电站
  16. 【Pixel刷机】记录一次Pixel 2 刷机, root
  17. android 粘性控件,RecyclerView 粘性标签库: 可结合 BRVAH 使用
  18. 部署Openstack-train版
  19. 算法复习——分治法重点问题
  20. android壁纸软件推荐,推荐四款主流安卓手机桌面美化软件评测

热门文章

  1. 基于RFID技术的电力计能表仓储管理系统—铨顺宏
  2. pre 标签自动换行
  3. linux系统日志记录syslog
  4. Pycharm添加源与添加库
  5. 自学软件测试多久,学到什么程度就可以去面试找工作了?【听听测试大佬怎么说】
  6. 光照与渲染(九)- 光源类型
  7. 使用 afl-fuzz 进行模糊测试
  8. Type.js – 帮助你更好的控制网页字体排版
  9. vscode画UML图
  10. python中format函数作用_Python代码中format函数具有哪些功能呢?