base 32 特性
base 32是由大写字母跟数字组成、最主要的是没有 0、8、9
键盘布局加密
-
这是一种比较简单也比较另类的密码,通常都是给出一堆无意义的字符,但是将这些字符按照在键盘上的布局比划一下,就可以根据形状拼出相应字符。
键盘坐标加密
BrainFuck(BF)编码 和 Ook编码
BF密码:+++++++{++++| ---- +><<<<>++++++++--+++} .++++++++++.....-------
Ook编码:Ook?Ook?Ook. Ook! Ook? && ..............!!!!!!?????........ ??!!
替代密码(凯撒、摩斯)
-
替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无意义的字符串,即密文。
摩斯密码
-
美国人艾尔菲德.维斯
.——. .--- ..- 或 0010 0100 1000 0110 //也有可能是摩斯密码转换一下就可以了(使用文本来将1替换为. 0替换- 然后进行解密)
可以斜杠分割也可以空格分割
linux下的python脚本
凯撒密码
-
凯撒密码是典型的替换密码,加密原理是把明文中所有字母都在字母表中向后(或向前)按照一个固定数目进行移位后替换成密文,而数字和非数字字符则保持不变。
-
位移数就是凯撒密码的密钥。凯撒密码只有25种可能的密钥,当年凯撒用的密钥是3。
软件:CTFCrakTolls跟图片颜色差不多。
ROT13密码
-
ROT13的密文和明文互为逆反,也就是说要还原ROT13,使用与加密同样的算法即可,故同样的操作可用于加密与解密。‘
回旋十三踢
ASCLL
-
是基于凯撒密码的基础之上的一个移位密码,移位密码不仅会处理字母,还可能处理数字和特殊的字符,所以常用的ASCLL码表进行移位。
奇怪的密码
变异凯撒
例1:
例2:(看后面的A的编码是64 =的编码是 61。先用凯撒解码将密文的编码后移6位得到 base64解码的密文,如何进行base64解码)
单表替换(凯撒密码改进)
凯撒密码是有25种解码方式,而他有26种。而且字母是随机排列的。
词频分析:英语中出现的平均频率来推测他的顺序。在CTF题目中,如果给出比较长的密文,那么很可能使用词频分析的方法来破解。
解密线下工具:WinDecrypto
培根密码
特性:培根密是一种简单的替换密码,密文字符只有两个:a和b,每个明文字符的都会被替换为一个由 a 和 b 组成的长度为5的字符串。
-
比如明文h被替换后和密文为aabbb。
-
密文字符也可以选择任意两个其他字符.
-
如果看到这种全部由两个字母组成的密文,那么就可以猜测为可能是培根密码。
培根密码表
灵活引用有 python
# 将_去掉 >>> 'aaaa_bbbbb_aaaa'.replace('_','') 'aaaabbbbbaaaa' # 将小写换位大写 >>> 'aaaabbbbbaaa'.upper() 'AAAABBBBBAAA' # 将不是 AB 的字母替换为 AB >>> a='DCCCDDDDDDDDDDDDCCCCCDCDCCCCCCCDDDDD' >>> table = ''.maketrans('CD','AB') >>> a.translate(table) 'BAAABBBBBBBBBBBBAAAAABABAAAAAAABBBBB' # 将一段大小写不一样的英文改为只有 ab 的这种培根密码(就是将 a 里的大写字母改为 a 、小写的字母改为b) >>> a = "Hookl'fSljihiiaAFUIjlkjiaojaLIA'" >>> flag = '' >>> for i in a: ... if i.isupper(): ... flag = flag + 'a' ... elif i.islower(): ... flag = flag + 'b' ... >>> flag 'abbbbbabbbbbbbaaaabbbbbbbbbaaa'
实践
-
有些题目会将培根密码进行二次加密,加一个凯撒密码啥的,解码之后会发现后面不 AB 是别的两个字母那就将他替换掉使用培根解密。
-
培根有些题需要去掉下划线,提交 flag 的时候需要加上下划线。
放射加密
-
凯撒密码是将明文与密钥相加得到的密文,防射密码则是将明文与密钥的一部分相乘,然后再加上密钥的另一部分。
-
为了便于计算,将26个英文字母用数字表是:a = 0,b = 1 ...... z = 24。
-
仿射加密的密钥有两个:a和b,取值范围都是[0,25]。
-
a 要求与 26 互质,互质就是这两个数的公因数只有1。
-
26 的因数:1,2,13
-
a 的因素不包含2或13即可。
-
放射加密原理
仿射解密
例:(乘法逆元)
已知仿射加密变换为 c=(11m+7)mode26,试对密文 dikxourxd 解密。
方法一
解:由题可知 a=11 b=7 (先求出 a 的乘法逆元)
# 求 a 的乘法逆元 >>> m = 1 >>> while True : ... if 11*m%26 == 1: ... print(m) ... break ... m = m + 1 ... 19
那么解密的公式就有了 (y-7)*19%26 将密文的英文字母转换为数值代入即可
>>> mi = 'dikxourxd' >>> for i in mi: ... print(chr(97+(ord(i)-97-7)*19%26),end='') ... ctfsdnisc>>> 答案就出来了 ctfsdnisc
方法二
属于暴力破解
>>> mi = 'dikxourxd' >>> for i in mi: ... for j in range(0,26): ... if (11*j+7)%26 == ord(i)-97: ... print(chr(97+j),end='') ... ctfsdnisc>>>
调用这个库需要 Python2
猪圈密码
(11条消息) 简单猪圈解码_花花日常生活的博客-CSDN博客
CTFCrakTools 软件
上面全是单表替换下面是表替换
维吉尼亚密码
脚本
费纳姆密码
实例
Python 解题 >>> txt = '00000000000000000000000000000000000000000000000000000000000000000101110000110001000000101000000001' >>> mi = [] >>> for i in range(0,len(txt),7): ... mi.append(txt[i:i+7]) ... >>> key = 'WELCOMETOCFF' >>> for m,n in zip(mi,key): ... print(m,n) ... 0000000 W 0000000 E 0000000 L 0000000 C 0000000 O 0000000 M 0000000 E 0000000 T 0000000 O 0010111 C 0000110 F 0010000 F >>> for m,n in zip() File "<stdin>", line 1 for m,n in zip() ^ SyntaxError: invalid syntax >>> for m,n in zip(mi,key): ... print(chr(int(m,2) ^ ord(n)),end='') ... WELCOMECISRG>>>
杰斐逊转轮加密
杰斐逊解码器,是由36个解码同样大小的木质转轮,套在一根铁杆上。每片转轮的周围边缘上刻有乱序26因为字母表。
置换密码
-
置换密码的主要思想是改变名为字符的排列方式
-
保持铭文字符相同,但是重新将字符进行排序,形成新的字符
栅栏密码
栅栏密码是吧铭文分成n个一组,然后把每组的第一个字符链接起来,形成无规律的字符。
明文:Ilovelinux 共有10个字符,可以分为2个一组或者文5个一组(也就是吧民文整除后得到的栅栏数)
使用kali进行图片分析
file +文件名 //查看是那种文件类型 exif +文件名 //查看exif文件信息 binwalk +文件名 //查看是否有隐藏文件 strings +文件名 | grep -i flag //查看文件内容 strings +文件名 //....