Crypto
Ctf - Crypto基础
一些解码工具
凯撒密码(caesar cipher):
替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文
chr((ord(s) + k) % keyspace
# 十六进制字符串转化为ASCII码
# codecs.decode(string, "hex") 将十六进制字符串转化为ASCII码,之后需要使用 str() 方法将返回的字节数组转换为字符串
# Hex 编码也被称作为 Base16 编码,相比于原先8位表示一个字节,Hex 编码能够只用2位表示一个字节
# ord()函数就是用来返回单个字符的ascii值[0-255], 或者unicode数值(),
# 相反地,chr()函数是输入一个整数[0-255], 返回其对应的ascii符号, 这个整数可以是10进制也可以是16进制。
- Training: Crypto - Caesar I (Crypto, Training)
input = "GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT BS PNRFNE NAQ LBHE HAVDHR FBYHGVBA VF UBORBUFUPAFN"
for k in range(1, 26):
for c in input:
if c == ' ':
print(' ', end='')
else:
integer = ord(c) + k
print(chr((integer - ord('A')) % 26 + ord('A')), end='')
print()
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG OF CAESAR AND YOUR UNIQUE SOLUTION IS HOBEOHSHCNSA
—— 得到flag为HOBEOHSHCNSA
- Training: Crypto - Caesar II (Crypto, Training)
data = """
32 5A 5A 4F 20 55 5A 4D 17 20 64 5A 60 20 5E 5A
57 61 50 4F 20 5A 59 50 20 58 5A 5D 50 20 4E 53
4C 57 57 50 59 52 50 20 54 59 20 64 5A 60 5D 20
55 5A 60 5D 59 50 64 19 20 3F 53 54 5E 20 5A 59
50 20 62 4C 5E 20 51 4C 54 5D 57 64 20 50 4C 5E
64 20 5F 5A 20 4E 5D 4C 4E 56 19 20 42 4C 5E 59
12 5F 20 54 5F 2A 20 1C 1D 23 20 56 50 64 5E 20
54 5E 20 4C 20 5C 60 54 5F 50 20 5E 58 4C 57 57
20 56 50 64 5E 5B 4C 4E 50 17 20 5E 5A 20 54 5F
20 5E 53 5A 60 57 4F 59 12 5F 20 53 4C 61 50 20
5F 4C 56 50 59 20 64 5A 60 20 5F 5A 5A 20 57 5A
59 52 20 5F 5A 20 4F 50 4E 5D 64 5B 5F 20 5F 53
54 5E 20 58 50 5E 5E 4C 52 50 19 20 42 50 57 57
20 4F 5A 59 50 17 20 64 5A 60 5D 20 5E 5A 57 60
5F 54 5A 59 20 54 5E 20 4E 5A 4D 57 5E 58 4E 58
5B 5E 5D 59 19 """
data1 = data.replace(" ", "")
data2 = data1.replace("\n", "")
for k in range(1, 128):
strs = str(codecs.decode(data2, "hex"), 'utf-8')
for s in strs:
print(chr((ord(s) + k) % 128), end="")
print()
'OODJOB YOUSOLVEDONEMORECHALLENGEINYOURJOURNEY4HISONEWASFAIRLYEASYTOCRACK7ASNTITKEYSISAQUITESMALLKEYSPACE SOITSHOULDNTHAVETAKENYOUTOOLONGTODECRYPTTHISMESSAGE7ELLDONE YOURSOLUTIONISCOBLSMCMPSRN
—— 得到flag为COBLSMCMPSRN