一.Playfair体制
密文特征:
它有一些不太明显的特征:密文的字母数一定是偶数;任意两个同组的字母都不会相同,如果出现这种字符必是乱码和虚码。
工具
二.Beaufort体制——多表加法密码
与Vigenere体制极其相似,不过就是算法上有一点点小变化
密文特征:
与维吉尼亚密码一样,都是全英文,它们二者基本上可视作加解密过程不同,其他无明显区别
工具:
三.棋盘密码
棋盘密码
棋盘密码是指密码破解规则中的字母或数字如棋盘一样排列的一种暗号密码。最早的,也是最经典的棋盘密码为波利比奥斯棋盘。
波利比奥斯棋盘(Polybius Checkerboard)是利用波利比奥斯方阵(Polybius Square)进行加密的密码方式,产生于公元前两世纪的希腊,相传是世界上最早的一种密码。简单的来说就是把字母排列好,用坐标的形式表现出来。字母是密文,明文便是字母的坐标。
密文特征:
1.密文为数字(例如:23 42 53 23 34)
按行列读取坐标,对照表图所示。
比如字母“F”,用数字表示它就是“21”。比如要表达单词“YES”,则写成密码就是54 15 43。
例如:
明文:HELP
密文:23 15 31 35
2.密文中只有 A D F G X
第一次世界大战: 德军采用由A、D、F 、G 、 X五个字母拼成全新密码加密的电报。
ADFGVX密码是德军在第一次世界大战中使用的栏块密码。事实上,它是早先一种密码 ADFGX的增补版。
下文举例ADFGX
例如:
明文 HELPME
密钥 WHERE
首先,将26个字母随机不重复填入方格中。
Generate Random Key:
Keysquare=gtcfrnsxvkyabmpuldwzohiqe
(i/l同格)
Keyword=come
Plaintext=helpme
再利用一个移位钥匙加密。密钥是“come”,将其写在新格子的第一列。再将上一阶段的密码文按行写进新方格里。
come cemo
-------->>>>>>>>--------(移位钥匙加密)
1234 1432
5678 5876
最后按照字母顺序 cemo 的顺序按列写出
Ciphertext=XXGGDFXXFXDX
• 解 密
举例第一种棋盘密码,只需要对应表格。
ADFGVX密码则首先知道对应表格字母排列方式,以及密钥。
1.将密钥按字母表顺序排列,将密文按列填入。
2.将密钥按正常顺序排列,列跟密钥变动,按行读出。
3.对应表格,读出对应字母,得明文。
工具:
四.【希尔密码(Hill Cipher)】
希尔密码就是矩阵乘法密码,运用基本矩阵论原理的替换密码。每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,
跟一个n×n的密钥矩阵相乘,再将得出的结果模26。希尔密码的优点是完全隐藏了字符的频率信息,弱点是容易被已知明文攻击击破。
加密
例如:密钥矩阵
1 3
0 2
明文:HI THERE
去空格,2个字母一组,根据字母表顺序换成矩阵数值如下,末尾的E为填充字元:
HI TH ER EE
8 20 5 5
9 8 18 5
HI 经过矩阵运算转换为 IS,具体算法参考下面的说明:
|1 3| 8 e1*8+3*9=35 MOD26=9 =I
|0 2| 9 e0*8+2*9=18 MOD26=18=S
用同样的方法把“HI THERE”转换为密文“IS RPGJTJ”,注意明文中的两个E分别变为密文中的G和T。
解密
解密时,必须先算出密钥的逆矩阵,然后再根据加密的过程做逆运算。
逆矩阵算法公式:
|A B| = 1/(AD-BC) * | D -B|
|C D| |-C A|
例如密钥矩阵=
|1 7|
|0 3|
AD-BC=1*3-0*7=3 3*X=1 mod26 所以 X=9
因此
|1 7| 的逆矩阵为: 9 * |3 -7|
|0 3| |0 1|
假设密文为“FOAOESWO”
FO AO ES WO
6 1 5 23
15 15 19 15
9* |3 -7| | 6| = 9*(3*6-7*15)=-783 mod26 = 23=W
|0 1| |15| = 9*(0*6+1*15)= 135 mod26 = 5 =E
所以密文“FOAOESWO”的明文为“WEREDONE”
工具
希尔(Hill Cipher)加密/解密 - Bugku CTFhttps://ctf.bugku.com/tool/hill
五.【费娜姆密码】
密文特征:
二战时德军使用过的一种密码,其实是利用了二进制的表示法来替代字母,有如下的表格作为基础:
A 1000001 B 1000010 C 1000011 D 1000100 E 1000101 F 1000110 G 1000111 H 1001000 I 1001001 J 1001010
K 1001011 L 1001100 M 1001101 N 1001110 O 1001111 P 1010000 Q 1010001 R 1010010 S 1010011 T 1010100
U 1010101 V 1010110 W 1010111 X 1011000 Y 1011001 Z 1011010
那么,比如我们要加密“Hello”,密钥用“study”,则以如下方式进行加密:
H E L L O = 1001000 1000101 1001100 1001100 1001111
S T U D Y = 1010011 1010100 1010101 1000100 1011001
加密原则:1+1=0,0+0=0,1+0=1
于是得密文:00110110010001001100100010000010110
那么解题目中的密文,需要遵循以下几个原则和步骤,
1,划分,即每七个数字为一组;
2,对应,找出密文每个字母对应的数字,再与上述数字对应;
3,转换,遵循上述加密原则,逆用即可;
4,解密,得出新的一组数字,对应字母,得出明文。