凯撒密码解密:http://ctf.ssleye.com/caesar.html
凯撒密码是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
根据偏移量的不同,还存在若干特定的恺撒密码名称:
-
偏移量为10:Avocat(A→K)
-
偏移量为13:rot13
-
偏移量为-5:Cassis (K 6)
-
偏移量为-6:Cassette (K 7) 密文 = 加密函数(明文 + key) % 26 明文 = 解密函数(密文 - key) % 26
借鉴了一下别的博主的代码,以下为python脚本解密,最后选取flag就可以,可作为模板解密:
def casearDecrypt(ciphertext, source_char, destination_char, list_all):
if list_all == True:
for offset in range(1, 27):
convertChar(offset)
else:
offset = ord(destination_char) - ord(source_char)
convertChar(offset)
def convertChar(offset):
chars = "abcdefghijklmnopqrstuvwxyz"
for char in ciphertext:
is_upper_flag = 0
if char.isupper():
char = char.lower()
is_upper_flag = 1
if char not in chars:
outputChar(is_upper_flag, char)
continue
tempchar_ascii = ord(char) + offset
tempchar = chr(tempchar_ascii)
if tempchar not in chars:
if offset < 0:
tempchar_ascii += len(chars)
else:
tempchar_ascii -= len(chars)
tempchar = chr(tempchar_ascii)
outputChar(is_upper_flag, tempchar)
print("")
def outputChar(is_upper_flag, char):
if is_upper_flag == 1:
print(char.upper(), end="")
else:
print(char, end="")
ciphertext = input("Please input ciphertext:\n")
while True:
operation = input("List all results?y/n:")
if operation == 'y' or operation == 'Y':
casearDecrypt(ciphertext, '', '', True)
break
elif operation == 'n' or operation == 'N':
des_char = input("Please input destination_char:\n")
sors_char = input("Please input source_char:\n")
casearDecrypt(ciphertext, sors_char, des_char, False)
break
else:
print("Input error! Please input y/n:")
此题偏移量为13,也可作为rot13密码解密。