所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第i个字连起来,形成一段无规律的话。
一般比较常见的是2栏的棚栏密码。
比如明文:THERE IS A CIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
这样就得到我们需要的密码了!
而解密的时候,我们先吧密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THERE IS A CIPHER
但是有些人就偏不把密码作出2栏,比如:
明文:THERE IS A CIPHER
七个一组:THEREIS ACIPHER
抽取字母:TA HC EI RP EH IE SR
组合得到密码:TAHCEIRPEHIESR
那么这时候就无法再按照2栏的方法来解了...
不过棚栏密码本身有一个潜规则,就是组成棚栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
这样,我们可以通过分析密码的字母数来解出密码...
比如:TAHCEIRPEHIESR
一共有14个字母,可能是2栏或者7栏...
尝试2栏...失败
尝试7栏...成功
然而当棚栏和拼音相结合后,诞生出一种令人痛恨的新思路...
比如在正道学院网络版的开篇flash中出现过这样一个棚栏:
QGBKSYSHJIEUEIIIIAN
总共19个字母~貌似不符合棚栏的规则...其实是因为出现了一个叫做捆绑的冬冬:
Q G B K S Y SH J
I E U E I I I IAN
七个不可思议事件
看到了吗?上面是声母,下面是韵母...
声母中的sh和韵母中的ian都是被作者当为一个字符使用...
“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。(既是今天我们所说的:替代密码)
它是一种置换密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
假如有这样一条指令:
明文(小写):ji xiao jing
用恺撒密码加密后就成为:
密文(大写):ML ALDR MLQJ
如果这份指令被敌方截获,也将不会泄密,因为字面上看不出任何意义。
这种加密方法还可以依据移位的不同产生新的变化,如将每个字母左19位,就产生这样一个明密对照表:
明文:a b c d e f g h i j k l m n o pq r s t u v w x y z
密文:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
在这个加密表下,明文与密文的对照关系就变成:
明文:b a i d u
密文:UTB WN
很明显,这种密码的密度是很低的,只需简单地统计字频就可以破译。于是人们在单一恺撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。它是由16世纪法国亨利三世王朝的布莱瑟·维吉尼亚发明的,其特点是将26个恺撒密表合成一个,见下表:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
CC D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
维吉尼亚密码(类似于今天我们所说的置换密码)引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:
密钥:RELAT IONSR ELATI ONSRE LATIO NSREL
明文:TOBEO RNOTT OBETH ATIST HEQUE STION
密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY
历史上以维吉尼亚密表为基础又演变出很多种加密方法,其基本元素无非是密表与密钥,并一直沿用到二战以后的初级电子密码机上。
公元前500年的古希腊人曾使用了一种著名的加密方法,叫什么名字?
Scytale密码
历史上最早的有记录的密码术应用大约是在公元前5世纪。那个时候,古希腊的斯巴达人使用一种叫作scytale的棍子来传递加密信息。在scytale上,斯巴达人会呈螺旋形地缠绕上一条羊皮纸或皮革。发信人在缠绕的羊皮纸上横着写下相关的信息,然后将羊皮纸取下,这样羊皮纸上就是一些毫无意义的字母顺序。如果要将这条消息解码,收件人只要将羊皮纸再次缠绕在相同直径的棍棒上,这样就可以读出信件的内容了。
有一个故事是这样的:公元前404年,斯巴达的Lysander遇到了一个从波斯回来的信使,他们一行5人中只有这一个人从这趟艰险的旅程中回来了。这个信使解下他的皮带,Lysander将皮带卷在scytale上,读出了信的内容,知道了波斯将要进攻他的意图,因而提前做好了准备
在我以前看过的一本书里,还有这样一个版本(多半是没有什么历史依据的):在古希腊,有个奴隶要通过一个关隘,斯巴达人检查了一下,没有发现什么问题。就在要放行的时候,有个将军突然发现奴隶身上的皮带上刻有字母,于是就把皮带拿来检查,发现这些字母是杂乱无章的,也没有什么头绪。当他无意把皮带卷起来的时候,却发现了上面的秘密,一下子这些字母就排列得规律起来了。就这样,这位将军发现了敌人的阴谋,这个奴隶也被处死了。
其实scytale密码和栅栏密码本质上没有什么区别。
大家可以用一根细长的长方形纸条和一支六角形的铅笔来试着写一下scytale密码比如,我写下了一句话,把纸条取下来后,得到了下面这样的密文:
stte_ _erh_ _ _noe_ _ _dob_ _ _mpr_ _ _osi_ _ _rtd_ _eog
这里用 _ 表示空格,因为铅笔刚好六条边,所以知道空格的多少。(通常可以把空格省略了,或者一般也不知道具体有多少空格。不过我们将会发现,除非整个纸条都写满了,不然总是会有空格的,这也为我们破译时分段带来了方便。)因为这里知道密钥k=6,所以按6个一行(包括空格)来分段,得到下面的样子:
stte_ _
erh_ _ _
noe_ _ _dob_ _ _
mpr_ _
osi_ _ _
rrtd_ _
eog
然后从上到下,一列一列的连起来,就得到了明文:sendmoretroopstothebridge
(send more troops to the bridge)
这里缠绕方向有两个,一个左旋,一个右旋。如果纸条卷的时候,方向反了,比如写的时候是左旋,读的时候是右旋,那么就会是从右到左来读出这条消息的内容。大家可以试一下。Xb1r2YD HV:i
另外,如果写的时候是另一个缠绕方向的话,同样是上面那句话,把纸条取下来后,就可能会得到下面这样的密文: `Vyf/l,iA F
eti_ _ _rsr_ _ _opb_ _ _moe_ _ _dohe_ _nrtg_ _etod_ _sy5tkK!~gv
密钥k=6,所以还是按6个一行(包括空格)来分段,得到下面的样子
eti_ _ _
rsr_ _ _
opb_ _ _
moe_ _ _dohe_ _
nrtg_ _
etod_ _
s
这时候怎样得到明文呢? 哈哈,反过来,从下到上,一列一列的连起来,就得到了明文:
sendmoretroopstothebridge
给大家个练习
练习2. 下面是我把纸条缠在一根火腿肠上,写下的一个句子,得到的密文如下:
toitdarwiuyhwghbdwsnt,这里我把空格省略掉了,看大家破译得出来不?
打眼一看 爱老虎油 换成数字 顺序直观些。ILOVEYOU 12345678。
所以IVOLEUOY 14325876
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
扩展
(1)在选择行数时可以使多行,这样对于加密强度有所提高。
(2)可以在加密之后在使用其他密码进行加密,增加强度
这就需要采用“加密”和“解密”的方法,让别人看到的是加密以后的文字,需要的时候自己阅读解密后的文字。
加密解密的方法很多,有一门“密码学”,就是专门研究这个问题的。以下介绍的,是对英文处理的方法,对于汉字,也可以同法处理,只不过一个汉字占两个字节而已,对每一个字节分别处理就行。下面介绍几种不同的加密解密方法(从最简单的说起):
##Caesar加密即凯撒密码,基础的基础,核心是“k”偏移量。其原理在于,按既有字母表顺序,以k为偏移量,使用一个字母后固定数值位的另一个字母代替该字母。例如:取k=3时,A应由D取代,整个字母表按序为“DEFGHIJKLMNOPQRSTUVWXYZ ABC”##Vigenere密码维吉尼亚密码,是在凯撒密码上的升级改良。
其目的在于对抗字频统计
人们在单一恺撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中。(百度百科)
维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:
密钥:RELAT IONSR ELATI ONSRE LATIO NSREL
明文:TOBEO RNOTT OBETH ATIST HEQUE STION
密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY
维吉尼亚密码字表:
想起小时候自己设密码时写的那个字表。。早就不知道丢哪去了。。
##栅栏式密码
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)特点:自身加密自身。自己打乱自己。需要的密钥是N。
一般比较常见的是2栏的栅栏密码。
比如明文:THERE IS A CIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
还原为所需密码。
而解密的时候,我们先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THERE IS A CIPHER