-
继续学习
2009-05-25
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://shilling.blogbus.com/logs/39935919.html
【Polybius密码(Polybius Cipher)】
也称棋盘密码,是利用波利比奥斯方阵(Polybius Square)进行加密的密码方式,产生于公元前两世纪的希腊,相传是世界上最早的一种密码。
假设我们需要发送明文讯息 “Attack at once”, 用一套秘密混杂的字母表填满波利比奥斯方阵,像是这样:
A D F G X
A b t a l p
D d h o z k
F q f v s n
G g j c u x
X m r e w yi和j视为同一个字,使字母数量符合 5 × 5 格。之所以选择这五个字母,是因为它们译成摩斯密码时不容易混淆,可以降低传输错误的机率。使用这个方格,找出明文字母在这个方格的位置,再以那个字母所在的栏名称和列名称代替这个字母。可将该讯息转换成处理过的分解形式。
明文:A T T A C K A T O N C E
密文:AF AD AD AF GF DX AF AD DF FX GF XFA,D,F,G,X也可以用数字1,2,3,4,5来代替,这样密文就成了:
13 12 12 13 43 25 13 12 23 35 43 53
-------------------------------------------------------------------------
【ADFGX/ADFGVX密码(ADFGX/ADFGVX Cipher)】ADFGX
1918年,第一次世界大战将要结束时,法军截获了一份德军电报,电文中的所有单词都由A、D、F、G、X五个字母拼成,因此被称为ADFGX密码。ADFGX密码是1918年3月由德军上校Fritz Nebel发明的,是结合了Polybius密码和置换密码的双重加密方案。A、D、F、G、X即Polybius方阵中的前5个字母。明文:A T T A C K A T O N C E
经过Polybius变换:AF AD AD AF GF DX AF AD DF FX GF XF下一步,利用一个移位密钥加密。假设密钥是“CARGO”,将之写在新格子的第一列。再将上一阶段的密码文一列一列写进新方格里。
C A R G O
_________
A F A D A
D A F G F
D X A F A
D D F F X
G F X F X最后,密钥按照字母表顺序“ACGOR”排序,再按照此顺序依次抄下每个字母下面的整列讯息,形成新密文。如下:
FAXDF ADDDG DGFFF AFAXX AFAFX
在实际应用中,移位密钥通常有两打字符那么长,且分解密钥和移位密钥都是每天更换的。
ADFGVX
在1918年6月,再加入一个字V扩充。变成以6×6格共36个字符加密。这使得所有英文字母(不再将I和J视为同一个字)以及数字0到9都可混合使用。这次增改是因为以原来的加密法发送含有大量数字的简短信息有问题。【乘法密码(Multiplication Cipher)】
乘法密码也是一种简单的替代密码,与凯撒密码相似,凯撒密码用的是加法,而乘法密码用的自然是乘法。这种方法形成的加密信息保密性比较低。
加密公式:密文 = (明文 * 乘数) Mod 26
对于乘数密码,只有当乘数与26互质时,加密之后才会有唯一的解,因此乘数只可能有如下11种的选择:
乘数 = 3,5,7,9,11,15,17,19,21,23,25
仿射密码和希尔密码因为都用到了乘法,所以乘数也受到相同的局限。
-------------------------------------------------------------------------
【仿射密码(Affine Shift)】仿射密码就是凯撒密码和乘法密码的结合。
加密公式:密文 = (明文 * 乘数 + 位移数) Mod 26
-------------------------------------------------------------------------
【希尔密码(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 5HI 经过矩阵运算转换为 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 159* |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”
-------------------------------------------------------------------------
【Playfair密码(Playfair Cipher)】Playfair将明文中的双字母组合作为一个单元对待,并将这些单元转换为双字母组合。加密后的字符出现的频率在一定程度上被均匀化。
5*5变换矩阵(I或J视为同一字符):
C I P H E
R A B D F
G K L M N
O Q S T U
V W X Y Z加密规则:按成对字母加密
相同对中的字母加分隔符(如x)
ballon -> ba lx lo on
同行取右边:he->ec
同列取下边:dm->mt
其他取交叉:kt->mq od->tr例如:ballon -> ba lx lo on -> db sp gs ug
【摩斯电码】
摩斯电码(摩尔斯电码)是一种发报用的信号代码,是一种替代密码,用点(Dot)和划(Dash)的组合来表示各个英文字母或标点。
国际标准摩斯电码表
1 *---- A *- N -* [.] *-*-*-
2 **--- B -*** O --- [,] --**--
3 ***-- C -*-* P *--* [:] ---***
4 ****- D -** Q --*- ['] *----*
5 ***** E * R *-* [?] **--**
6 -**** F **-* S *** [-] -****-
7 --*** G --* T - [()] -*--*-
8 ---** H **** U **- [@] *--*-*
9 ----* I ** V ***- [—] -***-
0 ----- J *--- W *-- 分数线 -**-*
K -*- X -**-
L *-** Y -*-- 终了[\r] ***-*-
M -- Z --** 始信[\n] -*-*-【置换密码(Transposition Cipher)】
也称易位密码。
-------------------------------------------------------------------------
【替代密码(Monoalphabetic Substitution)】也称单表替换密码。
字母表数字
用1-26这些数字分别表示A-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 Z
数字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26字母表代码
同字母表数字,只是把10以下的数字添0补位。字母 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
数字 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26反字母表
就是丹·布朗在《达·芬奇密码》一书中提到的埃特巴什码(Atbash Cipher)。它的原理是取一个字母,指出它位于字母表正数第几位,再把它替换为从字母表倒数同样的位数后得到的字母。如:E被替换为V,N被替换为M等。明码表 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
密码表 Z Y X W V U T S R Q P O N M L K J I H G F E D C B A明文:sophia
密文:hlksrz随机乱序字母
即单字母替换密码。重排密码表二十六个字母的顺序,密码表会增加到四千亿亿亿多种,能有效的防止用筛选的方法检验所有的密码表。这种密码持续使用几个世纪,直到阿拉伯人发明了频率分析法。明码表 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
密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M明文:forest
密文:gbmrst棋盘密码
即Polybius密码。键盘密码
加密的原理同棋盘密码,只是利用了键盘作为方阵。键盘的字母分布:
~!@#$%^&*()_+|
`1234567890-=\
QWERTYUIOP{}
qwertyuiop[]
ASDFGHJKL:"
asdfghjkl;'
ZXCVBNM<>?
zxcvbnm,./密文:72 81 12 63 01 12 63
明文:jianpan低下头看看键盘就知道了,密文就是键盘上的26个字母的坐标,72即第7列第2行,第7列正好是数字键[7]的位置,往下2个就是字母[J]。
键盘移位
密文:kosm[sm
明文:jianpan就是键盘上的字母往右一个。例如[j]键的右面是[k],[i]键的右面是[o],依此类推。
软键盘密码
密文1:まはす にはつ へつ たっゃの せちなゃ ひつなゃ てなゃ ひつな ゅつ ぬす
密文2:ㄈㄘㄍ ㄋㄘㄛ ㄠㄛ ㄗㄟㄙㄕ ㄐㄧㄇㄙ ㄨㄛㄇㄙ ㄣㄇㄙ ㄨㄛㄇ ㄩㄛ ㄎㄍ
密文3:црв мрж уж езып гёлы сжлы илы сжл ьж нв
密文4:#←☆ △←◇ 〓◇ ●◆_→ ★◎■_ ↑◇■_ □■_ ↑◇■  ̄◇ ▲☆
明文:zhe shi li yong ruan jian pan jia mi de(这是利用软键盘加密的)用智能ABC或微软拼音输入法,把小键盘打开,选择日本平假名字符,输入“zhe shi”就会出现“まはす にはつ”,如果切换到俄文字符就会出现“црв мрж”……
数字小键盘密码
数字小键盘的字母分布:
7 8 9
4 5 6
1 2 3密文:852 74123 741236987 74269 78974123456 7412369
明文:I L O V E U对照小键盘,依次打这些字母,看组成的形状就行了。
关于Alt+小键盘数字的加密方法,参看:百度/Google/网页字符。
手机键盘密码
[-----------------图-----------------]
根据手机键盘上的数字和对应的字母进行加密。
密文:42 21 71 71 93
明文:HAPPY“42”:4键对应的是GHI,GHI第2个就是H;“21”:2键对应的是ABC,ABC第1个就是A。
加密时往往只出现数字键,而不给出具体的字母位置,这时解密时就要列举所有可能的组合,从中选出有意义的单词来。
例如密文:42779,这时就要从 GHI ABC PQRS PQRS WXYZ 中提出有意义的字符:HAPPY
另一种方法是根据形状加密的,和数字小键盘密码相同,按照密码里的数字比划一下就划出来了。
比如密文173946,对应的明文是H,17是左边一竖,39是右边一竖,46是中间一横。
【百度/Google/网页字符】
下面解释一下在百度、Google搜索中文的关键词时,地址栏上出现的奇怪字符。
百度字符(GB2312)
例如在百度搜索“你好”两个字,会转到一个地址为 http://www.baidu.com/s?wd=%C4%E3%BA%C3 的网页。密文(GB码16进制):%C4%E3%BA%C3
密文(GB码十进制):50403 47811
明文:你好百度用的是GB2312的中文编码,是16进制的。GB2312是标准的简体中文编码。“你”字的GB码为C4E3,“好”字的GB码为BAC3。“你好”转换成十进制为50403和47811。
Google字符(URI)
例如在Google搜索“你好”两个字,会转到一个地址为 http://www.google.cn/search?q=%E4%BD%A0%E5%A5%BD 的网页。密文(URI):%E4%BD%A0%E5%A5%BD
明文:你好URI全称Uniform Resource Identifier(通用资源标识符)。Internet可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过URI进行定位。
网页编码(Unicode)
论坛里常玩的一个把戏,就是让你回帖时写一堆像天书一样的奇怪字符,而回帖之后就能看到相应的文字。密文(Unicode16进制):楼主是个天才
密文(Unicode10进制):楼主是个天才
明文:楼主是个天才这里使用的是Unicode编码(十进制),Unicode是一种全世界范围的文字编码,网页都支持这种编码。
Alt+数字小键盘
按住Alt键,在任意文本框中,用键盘右边的数字小键盘输入55021,然后松开Alt键,这时你看到了什么?用同样的方法分别输入“你好”两个字的GB代码(十进制)50403、47811,这时你将在文本框中看到这两个字。
注意在qq的对话框中,要使用Unicode代码(十进制)20320、22909。
转自:22 21 43,31 82,61 41, 61 21, 22 21
收藏到:Del.icio.us







