那些脑洞大开的加密
古典密码可以分为换位加密和替换加密
其中,替换加密可以分为单表替代密码和多表替代
换位加密
对明文字符或字符组进行位置移动的密码
明文的字母顺序被打乱了,但明文字母本身不变
栅栏密码(Rail-fence Cipher)
栅栏密码是一种简单的移动字符位置的加密方法,规则简单,容易破解
把要加密的明文分成n组,然后把每一组的第2个字符、第2个字符等依次连起来,最后把他们全部连接起来就是密文。栅栏密码又分为传统栅栏和w型栅栏
传统栅栏密码
明文
1 | WEAREDISCOVEREDFLEEATONCE |
每组字数为5,按照字数把明文分成:
1 | WEARE |
分别取每组第一个字符等连接后
1 | WDVFTEIELOASRENRCEECEODAE |
w型栅栏密码
W型栅栏密码加密的方法中,明文由上至下顺序写上,当到达最低部时,再回头向上,一直重复直至整篇明文写完为止
明文
1 | WEAREDISCOVEREDFLEEATONCE |
加密
1 | W . . . E . . . C . . . R . . . L . . . T . . . E |
按行读取后的密文:
1 | WECRLTEERDSOEEFEAOCAIVDEN |
曲路密码(Curve Cipher)
曲路密码(Curve Cipher)是一种换位密码,需要事先双方约定密钥(也就是曲路路径)。
明文
1 | The quick brown fox jumps over the lazy dog |
填入5行7列表(事先约定填充的行列数)
加密的回路线(事先约定填充的行列数)
密文
1 | gesfc inpho dtmwu qoury zejre hbxva lookT |
列移位密码(Columnar Transposition Cipher)
列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。
明文
1 | The quick brown fox jumps over the lazy dog |
密钥 how are u
填入5行7列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充)
密钥: how are u
按how are u在字母表中的出现的先后顺序进行编号,我们就有a为1,e为2,h为3,o为4,r为5,u为6,w为7,所以先写出a列,其次e列,以此类推写出的结果便是密文
密文
1 | qouryinphotkoolhbxvauwmtdcfsegerjez |
云影密码
该密码又称为01248,使用 0,1,2,4,8 四个数字,其中 0 用来表示间隔,其他数字以加法可以表示出
例如:18=1+8=9,9对应I
密文:
1 | 8842101220480224404014224202480122 |
采用0分割
1 | 88421 122 48 2244 4 142242 248 122 |
相加数字
1 | 23 5 12 12 4 15 14 5 |
对应字母后的明文
1 | WELLDONE |
替换加密
替换密码构造一个或多个密文字母表,然后用密文字母表中的字母或者字母组来代替明文字母或字母组,各字母或字母组的相对位置不变,但其本身的值改变了。
单表替换密码
明密文一一对应,因此破解方式单一
在密钥空间较小的情况下,采用暴力破解方式
在密文长度足够长的时候,使用词频分析,http://quipqiup.com/
凯撒密码(Caesar Cipher)
凯撒密码(Caesar Cipher)或凯撒变换、变换加密、位移加密)是一种替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
明文:The quick brown fox jumps over the lazy dog
偏移量:1
密文:Uif rvjdl cspxo gpy kvnqt pwfs uif mbaz eph
附上参考表
埃特巴什码(Atbash Cipher)
埃特巴什码(Atbash Cipher)是一种以字母倒序排列作为特殊密钥的替换加密
1 | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
明文: the quick brown fox jumps over the lazy dog
密文: gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt
ROT5/13/18/47
ROT5/13/18/47是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取。
R即rotate,旋转,ROT5表示旋转5个位置
ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码
下面以rot13以例。
明文: the quick brown fox jumps over the lazy dog
密文: gur dhvpx oebja sbk whzcf bire gur ynml qbt
ROT5、ROT13、ROT18、ROT47位移编码 (qqxiuzi.cn)
简单换位密码(Simple Substitution Cipher)
加密方式是以每个明文字母被与之唯一对应且不同的字母替换的方式实现的,它不同于恺撒密码,因为密码字母表的字母不是简单的移位,而是完全是混乱的, 这也使得其破解难度要高于凯撒密码。比如:
1 | 明文字母 : abcdefghijklmnopqrstuvwxyz |
明文: the quick brown fox jumps over the lazy dog
密文: cei jvaql hkdtf udz yvoxr dsik cei npbw gdm
由于这种加密方式导致其所有的密钥个数是26!26! ,所以几乎上不可能使用暴力的解决方式。所以我们 一般采用词频分析。
quipqiup - cryptoquip and cryptogram solver
培根密码(Baconian Cipher)
每个明文字母被一个由5字符组成的序列替换,最初的加密方式就是由’A’和’B’组成序列替换明文
1 | A = aaaaa I/J = abaaa R = baaaa |
明文: T H E F O X
密文: baaba aabbb aabaa aabab abbab babab
图形替代密码
猪圈密码(Pigpen Cipher)
或称九宫格密码、朱高密码、共济会密码或共济会员密码
是一种以格子为基础的简单替代式密码
圣堂武士密码(Templar Cipher)
是“猪圈密码”的一个变种
会跳舞的小人
仿射密码(Affine Cipher)
字母表中的每个字母相应的值使用一个简单的数学函数映射到对应的数值,再把对应数值转换成字母。
每一个字母都是通过函数(ax + b)mod m加密,其中b是位移量,为了保证仿射密码的可逆性,a和m需要满足gcd(a , m)=1,一般m为设置为26。
常见的字母对应关系:
下面我们以E(x) = (5x + 8) mod 26函数为例子
多表替换密码
棋盘密码(Checkerboard Cipher)
1 | Q U I C K |
经过密阵替换:
1 | 明文:T H E Q U I C K B R O W N F O X |
波利比奥斯方阵密码(Polybius Square )
简单的来说就是把字母排列好,用坐标(行列)的形式表现出来。字母是密文,明文便是字母的坐标。
明文:HELLO
密文:2315242434
维吉尼亚密码(Vigenère Cipher)
是在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计。
明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密钥(循环使用,密钥越长相对破解难度越大): CULTURE
加密过程:如果第一行为明文字母,第一列为密钥字母,那么明文字母’T’列和密钥字母’C’行的交点就是密文字母’V’,以此类推。
密文: VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFK
Online calculator: Vigenère cipher (planetcalc.com)
博福特密码(Beaufort Cipher)
一种类似于维吉尼亚密码的代换密码,博福特密码属于对等加密,即加密演算法与解密演算法相同。
明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密钥(循环使用,密钥越长相对破解难度越大): CULTURE
加密过程:如果第一行为明文字母,第一列为密文字母,那么沿明文字母’T’列出现密钥字母’C’的行号就是密文字母’J’,以此类推。
密文: JNH DAJCS TUFYE ZOX CZICM OZHC BKA RUMV RDY
滚动密钥密码(Running Key Cipher)
和维吉尼亚密码有着相同的加密机制,区别是密钥的选取,维吉尼亚使用的密钥简短,而且重复循环使用,与之相反,滚动密钥密码使用很长的密钥,比如引用一本书作为密钥。这样做的目的是不重复循环使用密钥,使密文更难破译
明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密钥:选取C语言编程(1978版)第63页第1行”errors can occur in several places. A label has…”,去掉非字母部分作为密钥(实际选取的密钥很长,长度至少不小于明文长度)。
加密过程:加密过程和维吉尼亚密码加密过程相同
密文: XYV ELAEK OFQYH WWK BYHTJ OGTC TJI DAK YESR
希尔密码(Hill Cipher)
介绍
希尔密码是基于线性代数多重代换密码。每个字母转换成26进制数字:A=0, B=1, C=2…Z=25一串字母当成n维向量,跟一个n×n的矩阵(密钥)相乘,再将得出的结果MOD26。
加密
明文:ACT
对应:0,2,19
密钥:GYBNQKURP
对应:6,24,1,13,16,10,20,17,15
加密矩阵:
把加密矩阵左乘明文对应矩阵
密文:
15,14,7分别对应POH
普莱菲尔密码(playfair)
是第一种用于实际的双字替换密码,用双字加密取代了简单代换密码的单字加密,很明显这样使得密文更难破译,因为使用简单替换密码的频率分析基本没有什么作用,虽然频率分析,通常仍然可以进行,但是有25×25=625种可能而不是25种可能
以明文THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
和密钥 CULTURE
为例
编制密码表
整理密钥字母 C U L T U R E
,去掉后面重复的字母得到: C U L T R E
用上一步得到的字母自上而下来填补5乘5方表的纵列(也可横排),之后的空白按照相同的顺序用字母表中剩余的字母依次填补完整,得到如下的方格:
这一步需要注意的要点:整理密钥字母时,如果出现”Z”,则需要去除,因为在英文里”Z”的使用频率最低,相应的如果是德文,则需将”I”与”J”当作一个字母来看待,而法语则去掉”W”或”K”
整理明文
原则是“两个一组”,得到是若干个两两成对的字母段
将明文两两一组按顺序排开,得到:
TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO G
2.对于末尾的单个字母要加上一个”
X
“使之成对:TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX
这一步需要注意的要点:对于相连字母相同者,每个后面都需要加”
X
“,例如TOMORROW
,需要写成:TO MO RX RX OW
。
编写密文
1.如果两个字母在同一行则要用它右邻的字母替换,如果已在最右边,则用该行最左边的替换,如明文为”
CE
“,依据上表,应替换为”EG
“;2.如果两个字母在同一列则要用它下边的字母替换,如果已在最下边,则用该行最上边的替换,如明文为”
OQ
“,依据上表,应替换为”PS
“;3.如果两个字母在不同的行或列,则应在密码表中找两个字母使四个字母组成一个矩形,明文占据两个顶点,需用另外两个顶点的字母替换,如明文为”
HX
“,可以替换为”WI/J
“或”I/JW
“(下面的例子将按照横向替换原则即同行优先)。
按照上述原则,将明文 TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX
加以转换得到 KU ND LH GT LF WU ES PW LH SI/J NP CG CR AG BU VZ QA I/JV
将得到的字母改为大写并五个一组列好,得到密文 KUNDL HGTLF WUESP WLHSI NPCGC RAGBU VZQAI V