RSA? cmd5!
题目信息
出题思路
RSA 的签名,往往是给接收方 B 确定发送方 A 的身份用的,但如果发送方用不安全的哈希算法来计算信息的信息摘要,那么有可能被中途的窃密者 C 利用而得到明文。
题目描述:
应该都了解 RSA 解密原理了吧?
Alice: 你把服务器密码用 RSA 加密给我发过来吧,记得带上签名.
Bob: 好麻烦,还要签名,算了,直接 MD5 签名一下就好了吧!
解析
这里我们得到了
python
def get_MD5(m0):
import hashlib
md5_object = hashlib.md5(m0.encode()) # 创建 MD5 对象并对文本进行编码
md5_result = md5_object.hexdigest() # 获取加密结果
return md5_result
def get_s(m0, d0, n0):
hm0 = get_MD5(m0)
hm1 = bytes_to_long(hm0.encode())
s0 = pow(hm1, d0, n0)
return s0
计算了 m0
的 MD5 为变量 hm0
,然后将变量 hm0
转成整数 hm1
进行计算
那么我们有
那么再结合题目名字和描述,去 cmd5.com 找 hm1
的结果:
adm0n12
计算 flag
python
flag = 'flag{th1s_1s_my_k3y:' + m + '0x' + hashlib.sha256(m.encode()).hexdigest() + '}'
EXP
python
from Crypto.Util.number import *
from gmpy2 import *
s = 7270513885194445005322518350289419893608325839878215682947885852347014936106128407554345668066935779849573932055239642406851308417046145495939362638652861562381316163080735160853285303356461796079298817982074998651099375222398758502559657988024308504098238446594559605603104540325738607539729848183025647146
e = 65537
n = 118167767283404647838357773955032661171703847685597271116789633496884884504237966404005641401909577369476550625894333528860763752286157264860218284704704444830864099870199623580368198306940575628872723737071517733553706154898255520538220530675603850372384339470410704813339357637359108745206967929184573003377
def get_flag(m0): # 请用这个函数来转m得到flag
import hashlib
flag = 'flag{th1s_1s_my_k3y:' + m0 + '0x' + hashlib.sha256(m0.encode()).hexdigest() + '}'
print(flag)
hm_int = pow(s, e, n)
hm_str = long_to_bytes(hm_int).decode()
print(hm_str) # 86133884de98baada58a8c4de66e15b8
m = 'adm0n12' # 通过 cmd5.com 查询到的结果
get_flag(m)
# flag{th1s_1s_my_k3y:adm0n120xbfab06114aa460b85135659e359fe443f9d91950ca95cbb2cbd6f88453e2b08b}
神秘数字:
plaintext
33020419294068288558474507763458223726290143000598988310562749956226420170565399347815795