第三届广东大学生网络安全攻防竞赛encipher

思路

1.这个密码题涉及到 RSA 加密和异或操作。我们已经知道了密文 ciphertext、公钥 N 和私钥 d 的值。我们需要找到原始消息。

首先,我们需要使用给定的 N 和 d 对密文 ciphertext 进行解密操作,得到明文 m。

python

m = pow(ciphertext, d, N)

然后,我们知道了明文 m 和异或密钥 key 的长度。由于明文 m 是通过异或密钥 key 进行异或操作得到的,我们可以得到 key 的长度。然后,我们可以使用 key 的长度从固定字符串中截取相应长度的部分作为 key。

python

key_length = len(long_to_bytes(m))

key = b'Life is like an ocean only strong-minded can reach the other shore'[:key_length]

接着,我们可以将 key 与解密后的明文 m 进行异或操作,得到原始消息。

python

original_msg = strxor(long_to_bytes(m), key)

这样,original_msg 就是解密后的原始消息。

2.在解密过程中,我们实际上不需要获取 key 的值,而是需要使用相同的过程来生成 key。在加密过程中,我们是根据输入消息的长度从固定字符串中截取与消息长度相同的部分作为 key。在解密过程中,我们需要重现这个过程,以便得到正确的 key。

所以,我们需要使用解密后的明文的长度来截取固定字符串中相应长度的部分作为 key。然后,将该 key 与解密后的明文进行异或操作,以还原出原始消息。代码如下所示:

python

msg_length = len(long_to_bytes(m))

key = b'Life is like an ocean only strong-minded can reach the other shore'[:msg_length]

original_msg = strxor(long_to_bytes(m), key)

3.实现脚本

from Crypto.Util.number import long_to_bytes

from Crypto.Util.strxor import strxor

m = pow(67254133265602132458415338912590207677514059205474875492945840960242620760650527587490927820914970400738307536068560894182603885331513473363314148815933001614692570010664750071300871546575845539616570277302220914885734071483970427419582877989670767595897758329863040523037547687185382294469780732905652150451, 4885628697024674802233453512637565599092248491488767824821990279922756927662223348312748794983451796542248787267207054348962258716585568185354414099671493917947012747791554070655258925730967322717771647407982984792632771150018212620323323635510053326184087327891569331050475507897640403090397521797022070233, 89714050971394259600440975863751229102748301873549839432714703551498380713981264101533375672970154214062583012365073892089644031804109941766201243163398926438698369735588338279544152140859123834763870759757751944228350552806429642516747541162527058800402619575257179607422628877017180197777983487523142664487)

key_length = len(long_to_bytes(1030318530773815943742979143417091812858550046016496885011))

key = b'Life is like an ocean only strong-minded can reach the other shore'[:key_length]

original_msg = strxor(long_to_bytes(m), key)

print(original_msg)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值