baigeiRSA2--攻防世界

下载看到附件:

import libnum
from Crypto.Util import number
from functools import reduce
from secret import flag

n = 5
size = 64
while True:
    ps = [number.getPrime(size) for _ in range(n)]
    if len(set(ps)) == n:
        break

e = 65537
n = reduce(lambda x, y: x*y, ps)
m = libnum.s2n(flag)
c = pow(m, e, n)

print('n = %d' % n)
print('c = %d' % c)
n = 175797137276517400024170861198192089021253920489351812147043687817076482376379806063372376015921
c = 144009221781172353636339988896910912047726260759108847257566019412382083853598735817869933202168

分析:

import libnum  # 导入libnum库,该库提供了一些数学和加密相关的功能  
  
from Crypto.Util import number  # 从Crypto.Util模块中导入number,该模块提供了与数字相关的实用功能  
  
from functools import reduce  # 导入reduce函数,该函数用于对序列进行归约操作  
  
from secret import flag  # 从secret模块中导入flag,flag是待加密的明文  
  
n = 5  # 初始化变量n,表示需要生成的质数的数量  
  
size = 64  # 初始化变量size,表示每个质数的位数  
  
while True:  # 开始一个无限循环  
  
    ps = [number.getPrime(size) for _ in range(n)]  # 生成n个size位的质数,并将它们存储在列表ps中  
  
    if len(set(ps)) == n:  # 检查列表ps中是否真的有n个不同的质数  
        break  # 如果确实有n个不同的质数,则跳出循环  
  
e = 65537  # 初始化变量e,这是RSA加密中的公钥指数,通常选择65537  
  
n = reduce(lambda x, y: x*y, ps)  # 使用reduce函数计算列表ps中所有质数的乘积,结果赋值给n  
# 这是RSA加密中的模数,它由多个质数的乘积组成  
  
m = libnum.s2n(flag)  # 使用libnum库的s2n函数将明文flag转换为数字形式,结果赋值给m  
  
c = pow(m, e, n)  # 使用pow函数计算m的e次方模n的结果,这是RSA加密的密文,结果赋值给c  
  
print('n = %d' % n)  # 打印模数n的值  
  
print('c = %d' % c)  # 打印密文c的值

exp:

yafu分解n

flag:

HSCTF{@Tv0_br3ad5_c1ip_cHe3se_!@}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值