首先推荐这篇文章,网上有多次转载,这是我见过日期比较早的 CTF中那些脑洞大开的编码和加密
凯撒密码
1 flag='flag{abcdef}' 2 c='' 3 n=20 4 for i in flag: 5 if 'a' <= i <='z': 6 i=chr(((ord(i)-ord('a'))+n)%26+ord('a')) 7 c+=i 8 print c
栅栏密码
1 n= 5 2 m = "flag{0123456789abcdef}" 3 c='' 4 for x in range(n): 5 for i in range(len(m)): 6 if((n - i + x) % n == 0): 7 c+=m[i] 8 print c 9 10 n=5 11 m='' 12 c=list(c) 13 zero=(n-len(c))%n 14 n=(len(c)+zero)/n 15 if zero != 0: 16 for i in range(1,zero): 17 c.insert(-n*i+1,'0') 18 c.append('0') 19 for x in range(n): 20 for i in range(len(c)): 21 if((n - i + x) % n == 0): 22 m+=c[i] 23 if zero!= 0: 24 m=m[:-zero] 25 print m
曼彻斯特编码与解码
1 flag = bin(int('flag{0123456789abcdef}'.encode('hex'),16))[2:] 2 s='00' 3 for i in range(len(flag)): 4 if flag[i]=='1': 5 s+='10' 6 else: 7 s+='01' 8 print hex(int(s,2))[2:-1] 9 #296969a56956696a6a9a5a555a565a595a5a5a655a665a695a6a5a955a9669566959695a6965696669696aa6 10 r="" 11 for i in range(len(s)/2): 12 if s[i*2:i*2+2] == '10': 13 r += '1' 14 else: 15 r += '0' 16 print hex(int(r,2))[2:-1].decode('hex') 17 #flag{0123456789abcdef}
差分曼彻斯特编码与解码
1 #coding=utf-8 2 flag = bin(int('flag{0123456789abcdef}'.encode('hex'),16))[2:] 3 s='01' # or '10' 4 for i in range(len(flag)): 5 if flag[i]=='1': 6 s+=s[-2:][::-1] 7 else: 8 s+=s[-2:] 9 print hex(int(s,2))[2:-1] 10 #6565659565569a99665959555956a6a55959596aa696a69aa69959aaa6569aa9655a9aa69a95656965656669 11 r="" 12 tmp = 0 13 for i in xrange(len(s)/2): 14 c = s[i*2] 15 if c == s[i*2 - 1]: 16 r += '1' 17 else: 18 r += '0' 19 print hex(int(r,2))[2:-1].decode('hex') 20 #flag{0123456789abcdef}