【挖坑】“鹏云杯”第十二届山东省大学生网络安全技能大赛Write Up
Crypto
一、你一定很懂MD5
- 描述:你一定很懂md5
题目
import uuid
import hashlib
flag = "flag{XXX}"
def abcduuid(flag):
for char in flag:
md5_hash = hashlib.md5(char.encode('utf-8')).hexdigest()
print(f"{md5_hash}")
if __name__ == "__main__":
abcduuid(flag)
'''output:
8fa14cdd754f91cc6554c9e71929cce7
2db95e8e1a9267b7a1188556b2013b33
0cc175b9c0f1b6a831c399e269772661
b2f5ff47436671b6e533d8dc3614845d
f95b70fdc3088560732a5ac135644506
e4da3b7fbbce2345d7772b0674a318d5
c4ca4238a0b923820dcc509a6f75849b
e1671797c52e15f763380b45e841ec32
c4ca4238a0b923820dcc509a6f75849b
eccbc87e4b5ce2fe28308fd9f2a7baf3
4a8a08f09d37b73795649038408b5f33
cfcd208495d565ef66e7dff9f98764da
e1671797c52e15f763380b45e841ec32
c81e728d9d4c2f636f067f89cc14862c
c4ca4238a0b923820dcc509a6f75849b
c4ca4238a0b923820dcc509a6f75849b
8f14e45fceea167a5a36dedd4bea2543
c81e728d9d4c2f636f067f89cc14862c
0cc175b9c0f1b6a831c399e269772661
8277e0910d750195b448797616e091ad
8fa14cdd754f91cc6554c9e71929cce7
c4ca4238a0b923820dcc509a6f75849b
c9f0f895fb98ab9159f51fd0297e236d
c9f0f895fb98ab9159f51fd0297e236d
eccbc87e4b5ce2fe28308fd9f2a7baf3
92eb5ffee6ae2fec3ad71c777531578f
e4da3b7fbbce2345d7772b0674a318d5
c4ca4238a0b923820dcc509a6f75849b
e4da3b7fbbce2345d7772b0674a318d5
8fa14cdd754f91cc6554c9e71929cce7
e4da3b7fbbce2345d7772b0674a318d5
c81e728d9d4c2f636f067f89cc14862c
0cc175b9c0f1b6a831c399e269772661
8fa14cdd754f91cc6554c9e71929cce7
92eb5ffee6ae2fec3ad71c777531578f
c9f0f895fb98ab9159f51fd0297e236d
cfcd208495d565ef66e7dff9f98764da
cbb184dd8e05c9709e5dcaedaa0495cf
'''
解析
- 签到题,观察函数,
flag变量是字符串,执行函数的时候将每个字符挨个md5由此可得:
8fa14cdd754f91cc6554c9e71929cce7--f
2db95e8e1a9267b7a1188556b2013b33--l
0cc175b9c0f1b6a831c399e269772661--a
b2f5ff47436671b6e533d8dc3614845d--g
f95b70fdc3088560732a5ac135644506--{
······
cbb184dd8e05c9709e5dcaedaa0495cf--}
- 再看调用的库:
import uuid
import hashlib
jihe = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]
jihe_md5 = []
flag_md5 = [
'e4da3b7fbbce2345d7772b0674a318d5',
'c4ca4238a0b923820dcc509a6f75849b',
'e1671797c52e15f763380b45e841ec32',
'c4ca4238a0b923820dcc509a6f75849b',
'eccbc87e4b5ce2fe28308fd9f2a7baf3',
'4a8a08f09d37b73795649038408b5f33',
'cfcd208495d565ef66e7dff9f98764da',
'e1671797c52e15f763380b45e841ec32',
'c81e728d9d4c2f636f067f89cc14862c',
'c4ca4238a0b923820dcc509a6f75849b',
'c4ca4238a0b923820dcc509a6f75849b',
'8f14e45fceea167a5a36dedd4bea2543',
'c81e728d9d4c2f636f067f89cc14862c',
'0cc175b9c0f1b6a831c399e269772661',
'8277e0910d750195b448797616e091ad',
'8fa14cdd754f91cc6554c9e71929cce7',
'c4ca4238a0b923820dcc509a6f75849b',
'c9f0f895fb98ab9159f51fd0297e236d',
'c9f0f895fb98ab9159f51fd0297e236d',
'eccbc87e4b5ce2fe28308fd9f2a7baf3',
'92eb5ffee6ae2fec3ad71c777531578f',
'e4da3b7fbbce2345d7772b0674a318d5',
'c4ca4238a0b923820dcc509a6f75849b',
'e4da3b7fbbce2345d7772b0674a318d5',
'8fa14cdd754f91cc6554c9e71929cce7',
'e4da3b7fbbce2345d7772b0674a318d5',
'c81e728d9d4c2f636f067f89cc14862c',
'0cc175b9c0f1b6a831c399e269772661',
'8fa14cdd754f91cc6554c9e71929cce7',
'92eb5ffee6ae2fec3ad71c777531578f',
'c9f0f895fb98ab9159f51fd0297e236d',
'cfcd208495d565ef66e7dff9f98764da',
]
jieguo = ''
# def abcduuid(jihe):
# for char in flag:
# md5_hash = hashlib.md5(char.encode('utf-8')).hexdigest()
# print(f"{md5_hash}")
if __name__ == "__main__":
# abcduuid(flag)
for char in jihe:
md5_hash = hashlib.md5(char.encode('utf-8')).hexdigest()
jihe_md5.append(md5_hash)
print("flag{",end="")
for i in flag_md5:
for j_index in range(len(jihe_md5)):
if jihe_md5[j_index] == i:
print(jihe[j_index],end="")
print("}")
- 最后得结果:
flag{51e13c0e21172adf1883b515f52afb80}
二、滑滑果实
- 描述:简单rsa
题目
from Crypto.Util.number import *
from random import choice
from secret import flag
flag=flag.decode('utf-8')+ "1" * 30
def getMyPrime(nbits):
while True:
p = 1
while p.bit_length() <= nbits:
p *= choice(sieve_base)
if isPrime(p-1):
return p-1
p = getMyPrime(256)
q = getMyPrime(256)
n = p*q
e = 65537
m = bytes_to_long(flag.encode('utf-8'))
c = pow(m, e, n)
print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')
# n = 628367984743024460258949874461149142010669513982134034370937872907905412845791373384712099210680007304553638206133651385921799225422417075701557994891635322641
# e = 65537
# c = 463865728618910033824119037781408268137675300311981183906046145489848078253770973845564931794701097695379503336925847137631988673327885373164114472241504247048
解析
三、罗宾
- 航海王罗宾
题目
from Crypto.Util.number import *
from secret import flag
while True:
p = getPrime(512)
q = getPrime(512)
if p > q and p % 4 == 3 and q % 4 == 3:
break
assert p > q
assert p % 4 == 3 and q % 4 == 3
n = p*q
e = 256
m = bytes_to_long(flag)
num1 = (pow(p,e,n)-pow(q,e,n)) % n
num2 = pow(p-q,e,n)
c = pow(m,e,n)
print("num1=",num1)
print("num2=",num2)
print("n=",n)
print("c=",c)
'''
num1= 19192214345568282361143831762731579645648802833820598565388379756595428760334630560296393860466046979114899673897673927969477618440637313640577176586803348621764918116688617376746388475298862860762248790074536531747512830255704264059532044986242146801482634753762540517181185001269825954553476322801660257552
num2= 1568551398305679083267397284255270005841002127147169817549487956792747617495701572623425313945858925638570829221290630615717334659149130869568717471079357655056150007906387481246758626708251179837055786178688464859524860856376064627460871593508265427338629830060515285197179219102775933532951875057200454276
n= 161394237448593726399390155091617225347673643601138521445953905009268289118864990868883869709883242749690935544616593975790870662468264140281870315477572924050744895172590009006741901515772825887787298385680518186040774068566845468088807266556281743467840207792456353690277762378410012779367086473342553960057
c= 75371270117319814842848747897174097438865930394501287336684979146400521371081998386980846273741231743283549883480415833183405923650152183430658932147984033470642583120706407687796710740727334699147323591463677654238685426270075745206486187128417292433982349031510441993912067276414785111703413639508603271434
'''
解析
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 ShiDai
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

