1.题目

from Crypto.Util.number import isPrime, getStrongPrime
from gmpy import next_prime
from secret import flag# Anti-Fermat Key Generation
p = getStrongPrime(1024)
q = next_prime(p ^ ((1<<1024)-1))
n = p * q
e = 65537# Encryption
m = int.from_bytes(flag, 'big')
assert m < n
c = pow(m, e, n)print('n = {}'.format(hex(n)))
print('c = {}'.format(hex(c)))#n = 0x1ffc7dc6b9667b0dcd00d6ae92fb34ed0f3d84285364c73fbf6a572c9081931be0b0610464152de7e0468ca7452c738611656f1f9217a944e64ca2b3a89d889ffc06e6503cfec3ccb491e9b6176ec468687bf4763c6591f89e750bf1e4f9d6855752c19de4289d1a7cea33b077bdcda3c84f6f3762dc9d96d2853f94cc688b3c9d8e67386a147524a2b23b1092f0be1aa286f2aa13aafba62604435acbaa79f4e53dea93ae8a22655287f4d2fa95269877991c57da6fdeeb3d46270cd69b6bfa537bfd14c926cf39b94d0f06228313d21ec6be2311f526e6515069dbb1b06fe3cf1f62c0962da2bc98fa4808c201e4efe7a252f9f823e710d6ad2fb974949751
#c = 0x60160bfed79384048d0d46b807322e65c037fa90fac9fd08b512a3931b6dca2a745443a9b90de2fa47aaf8a250287e34563e6b1a6761dc0ccb99cb9d67ae1c9f49699651eafb71a74b097fc0def77cf287010f1e7bd614dccfb411cdccbb84c60830e515c05481769bd95e656d839337d430db66abcd3a869c6348616b78d06eb903f8abd121c851696bd4cb2a1a40a07eea17c4e33c6a1beafb79d881d595472ab6ce3c61d6d62c4ef6fa8903149435c844a3fab9286d212da72b2548f087e37105f4657d5a946afd12b1822ceb99c3b407bb40e21163c1466d116d67c16a2a3a79e5cc9d1f6a1054d6be6731e3cd19abbd9e9b23309f87bfe51a822410a62

2.复现

重点看p,q的生成方式,p是随机的1024位素数,q = next_prime(p ^ ((1<<1024)-1))。

1<<1024-1=2**1024-1化为2进制就是1024个1,由于一个二进制数异或1就是取它的反,意思就是1变成0,0变成1。所以p^2**1024-1的结果x是把p的每一位取反,所以x+p=2**1024-1。

由于q是x的下一个素数所以q=x+r,带进去p+q=2**1024-1+r,所以p+q就约等于2**1024。

又由于 把p+q带进去

所以4n=2**2048-(p-q)**2,p-q=,因为p+q= ,所以p=

然后再向后面爆破p就行了。

import gmpy2
import sympy
import libnum
n = int(0x1ffc7dc6b9667b0dcd00d6ae92fb34ed0f3d84285364c73fbf6a572c9081931be0b0610464152de7e0468ca7452c738611656f1f9217a944e64ca2b3a89d889ffc06e6503cfec3ccb491e9b6176ec468687bf4763c6591f89e750bf1e4f9d6855752c19de4289d1a7cea33b077bdcda3c84f6f3762dc9d96d2853f94cc688b3c9d8e67386a147524a2b23b1092f0be1aa286f2aa13aafba62604435acbaa79f4e53dea93ae8a22655287f4d2fa95269877991c57da6fdeeb3d46270cd69b6bfa537bfd14c926cf39b94d0f06228313d21ec6be2311f526e6515069dbb1b06fe3cf1f62c0962da2bc98fa4808c201e4efe7a252f9f823e710d6ad2fb974949751)
c = int(0x60160bfed79384048d0d46b807322e65c037fa90fac9fd08b512a3931b6dca2a745443a9b90de2fa47aaf8a250287e34563e6b1a6761dc0ccb99cb9d67ae1c9f49699651eafb71a74b097fc0def77cf287010f1e7bd614dccfb411cdccbb84c60830e515c05481769bd95e656d839337d430db66abcd3a869c6348616b78d06eb903f8abd121c851696bd4cb2a1a40a07eea17c4e33c6a1beafb79d881d595472ab6ce3c61d6d62c4ef6fa8903149435c844a3fab9286d212da72b2548f087e37105f4657d5a946afd12b1822ceb99c3b407bb40e21163c1466d116d67c16a2a3a79e5cc9d1f6a1054d6be6731e3cd19abbd9e9b23309f87bfe51a822410a62)
e = 65537
p=(gmpy2.iroot(pow(2,2048)-4*n,2)[0]+pow(2,1024))//2
# p=(2**1024+gmpy2.iroot((2**1024)**2-4*n,2)[0])//2
p=int(p)
while(1):p=sympy.nextprime(p)if(n%p==0):print(p)break
q=n//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
flag=libnum.n2s(int(m))
print(flag)
# b'Good job! Here is the flag:\n+-----------------------------------------------------------+\n| zer0pts{F3rm4t,y0ur_m3th0d_n0_l0ng3r_w0rks.y0u_4r3_f1r3d} |\n+-----------------------------------------------------------+'

【zer0pts CTF 2022】 Anti-Fermat相关推荐

  1. 【zer0pts CTF 2022】 Anti-Fermat(p、q生成不当)

    题目源码 from Crypto.Util.number import isPrime, getStrongPrime from gmpy import next_prime from secret ...

  2. 【Visual Studio 2022】VS2022安装教程

    一.Windows安装Visual Studio 2022 1.1 下载地址 首先登陆Visual Studio官网 Visual Studio 2022官网下载地址 界面如下所示.然后选择需要的版本 ...

  3. 关于我的那些事【我的2022】

    当人第一认识到自己并不能解决一切问题的时候,可能这时候就是一瞬间成长的时候吧.翻开博客发现上次写杂感类的还是2018年,一晃4年多过去了,也该回头看看了. 一.生活与工作 1.生活 这段时间对我有什么 ...

  4. 【蓝桥杯2022】- 数的拆分

    数的拆分 以下为个人对赛题的一个分析,不能保证正确性,如果认为分析有问题,请批评指正. 最终代码有还有问题,为开根号的精度问题,如果是开3,7次根等,则可能误判. 问题描述 问题分析 分析一 问题正整 ...

  5. 【年度总结 | 2022】想干什么就去干吧,少年

  6. 【CS231n assignment 2022】Assignment 3 - Part 3,Transformer

  7. 【CS231n assignment 2022】Assignment 2 - Part 1,全连接网络的初始化以及正反向传播

  8. 【软件安全实验2022】验证码——1

    exeinfo 查壳,没啥问题 打开 IDA,查找字符串 其中这一项比较可疑,形式一样,进入查看 进入,A 键整理字符串 整理好后是这样 X 键查看交叉引用 运气不错!进入 尝试 Tab 键转换成类 ...

  9. 【CS231n assignment 2022】Assignment 2 - Part 2,优化器,批归一化以及层归一化

最新文章

  1. java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解
  2. Boost 1.34.0 终于5.12发布了
  3. 前端开发 图片的插入 。。。。需演练
  4. Java笔记(11):Eclipse使用
  5. socket地址API
  6. CocoaPods 基础知识--------安装 及 使用第三方库
  7. 当 Windows 11 宕机时:从蓝屏死机变成“黑屏死机”!
  8. Druid 不仅仅是一个数据库连接池
  9. vue-cli新建工程后提高页面加载速度(含升级webpack4)
  10. python大家都是怎么学的_你们都是怎么学 Python 的?
  11. ORACLE常用函数汇总
  12. Hessian矩阵(黑塞矩阵)
  13. 1. VS2017社区版安装
  14. 随机森林简单回归预测
  15. 一文搞懂Matlab的3种取整函数(round、ceil、floor)
  16. 高等数学复习笔记——第八章:向量代数与空间解析几何
  17. 使用Graphics2D给报警图片画框和提示信息
  18. 通用权限管理系统项目简单介绍
  19. 计算机翻译turtle,turtle是什么意思_turtle的翻译_音标_读音_用法_例句_爱词霸在线词典...
  20. TCP报文( tcp dup ack 、TCP Retransmission)

热门文章

  1. 2020年电工(中级)新版试题及电工(中级)考试申请表
  2. 计算机病毒狭义和广义的区别,狭义相对论和广义相对论的区别是什么?
  3. Please make sure the -vm option in eclipse.ini is pointing to a JDK and verify that Installed JRE’s
  4. 苹果iphone手机哪些机型支持刷公交卡
  5. 技术经理成长复盘-大重构
  6. 图灵学院 python全栈_图灵学院 Python全系列教程全栈工程师 python视频教程下载
  7. java list判断元素_Java的ListObject如何判断元素类别
  8. React学习笔记003-内外联样式
  9. 米家扫地机器人尘盒怎么取_米家扫地机器人怎么打开尘盒
  10. HyperV修改分辨率