CTF-RSA_基于N分解的RSA题目

本文介绍了CTF中基于N分解的RSA题目,包括如何利用在线查询网站、yafu工具和费马分解方法来求解p和q,当p和q接近时,分解变得容易。解题关键在于分解N后,使用脚本完成解密过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTF-RSA_基于N分解的RSA题目

  • 对N进行分解(只要知道p和q,就能解出任何rsa)
  • N在有一般情况下不可分解的,如果p和q太接近,或相差过大,或pq很小等情况

1.在线查询分解网站

http://www.factordb.com/index.php

2.使用yafu工具分解

下载地址:https://sourceforge.net/projects/yafu/

#以分解49为例
yafu-x64.exe factor(49)

#导入文件进行分解,主要注意文本结尾要换行!!!不然要报错
yafu-x64.exe "factor(@)" -batchfile 1.txt

3.使用费马分解

网上找的脚本,p和q太接近

def isqrt(n):
  x = n
  y = (x + n // x) // 2
  while y < x:
    x = y
    y = (x + n // x) // 2
  return x

def fermat(n, verbose=True):
    a = isqrt(n) # int(ceil(n**0.5))
    b2 = a*a - n
    b = isqrt(n) # int(b2**0.5)
    count = 0
    while b*b != b2:
        # if verbose:
        #     print('Trying: a=%s b2=%s b=%s' % (a, b2, b))
        a = a + 1
        b2 = a*a - n
        b = isqrt(b2) # int(b2**0.5)
        count += 1
    p=a+b
    q=a-b
    assert n == p * q
    # print('a=',a)
    # print('b=',b)
    # print('p=',p)
    # print('q=',q)
    # print('pq=',p*q)
    return p, q
fermat(n)

脚本2


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值