[HDCTF2019]basic rsa 1

  1. 下载文件得到py脚本,有报错,肯定想让我们修改代码,能正常运行下去,但是我不干!

    44f6308462637a65dfa0e8df2a2c4660.png

  2. 有两种解法

1. 第一种就是直接使用西二风大佬的RSA脚本

a. 先计算出模数N,再计算出D,计算得到密文

8af7f9ec38f67441c43dbba78ef63d67.png

b. 最后再转换为flag就可以了

 

8ead7f60441a6886b44dbc0e577cc278.png

2. 第二种就是修改代码

a. 先运行看报错,显示需要字节对象

4af93dc90f77ae7de70c108f00a14902.png

b. 原因是:b2a_hex(flag) 来将 flag 转换为十六进制,但实际上 b2a_hex 的输入应该是字节序列,而不是字符串。因此,需要首先将 flag 转换为字节,然后再进行十六进制转换。

脚本小子目前实力有限,直接用ai生成

from Crypto.Util.number import *
from binascii import b2a_hex, a2b_hex

# RSA 参数
p = 262248800182277040650192055439906580479
q = 262854994239322828547925595487519915551

e = 65533
n = p * q
phi_n = (p - 1) * (q - 1)

# 计算私钥 d
d = inverse(e, phi_n)

# 原始 flag
flag = "flag{example_flag}"

# 加密过程
flag_bytes = flag.encode('utf-8')  # 转换为字节
flag_hex = int(b2a_hex(flag_bytes), 16)  # 转换为十六进制整数

# 加密 (c = m^e % n)
c = pow(flag_hex, e, n)
print(f"密文 (整数): {c}")

# 解密过程
# 解密 (m = c^d % n)
m_decrypted = pow(c, d, n)

# 将解密后的整数转换回字节
m_bytes = long_to_bytes(m_decrypted)

# 将字节解码回 UTF-8 字符串
flag_decrypted = m_bytes.decode('utf-8')

print(f"解密后的 flag: {flag_decrypted}")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值