信息安全加密技术-Polybius密码

信息安全加密技术--Polybius密码


         1、 也称棋盘密码,是利用波利比奥斯方阵进行加密的密码方式,ADFGVX密码是德军在第一次世界大战中使用的栏块密码。事实上,它是早先一种密码 ADFGX 的增补版。1918年3月Fritz Nebel上校发明了这种密码,并提倡使用。它结合了改良过的Polybius方格替代密码与单行换位密码。这个密码以使用于密文当中六个字母 A, D, F, G, V, X命名。ADFGVX 是被法国陆军中尉 Georges Painvin 所破解的。以古典密码学的标准来说,此密码破解的工作是属于格外困难的,在这期间,Painvin 更因此健康蒙受了严重损伤。他破解的方法是依靠于找到多份开头相同的讯息,这表示说它们是被相同的分解钥匙和移位钥匙加密的。 

         2、用一套错综复杂的字母表填满波利比奥斯方阵图1 波利比奥斯方阵在方阵中,将i和j视为同一个字符,使字母数量符合5*5格


图1 波利比奥斯方阵


         3、为何选择ADFGX?

                                |:他们译成摩斯码时不容易混淆,可以降低传输错的几率

                               ||:使用这个方格,找出明文字母在这个方格的位置,再以那个字母所在的栏名称和列名称代替这个字母 

         4、示例:

                                加密时可以在表格中找到明文,然后使用明文所在的行字符和列字符代替,比如明文为g,则密文为GA,明文为a,则密文为 AF。解密时只需在密码表里边找到                                    行列所对应的字符就可以解密,比如密文为AFAD,则明文为AT,比如密文为XF,则明文为e


                   明文:A     T     T   A    C   K    A    T    O    N  C    E 

                   密文:AF AD AD AF GF DX AF AD DF FX GF XF 

         5、算法实现: 实现该方法加密有两种思路:

                (1)完全使用替代法 可以将表格里边的25个字母使用replaceAll()函数进行代替操作,在解密时使用同样的操作即可 

部分代码如下所示:

          加密部分:

					str_p=str_p.replace("b","AA:");str_p=str_p.replace("t","AD:");
					str_p=str_p.replace("a","AF:");str_p=str_p.replace("l","AG:");
					str_p=str_p.replace("p","AX:");str_p=str_p.replace("d","DA:");
					str_p=str_p.replace("h","DD:");str_p=str_p.replace("o","DF:");
	                                str_p=str_p.replace("z","DG:");str_p=str_p.replace("k","DX:");
									
         解密部分:

				        str_c=str_c.replace("AF:","a");str_c=str_c.replace("AG:","l");
				        str_c=str_c.replace("AX:","p");str_c=str_c.replace("DA:","d");
					str_c=str_c.replace("DD:","h");str_c=str_c.replace("DF:","o");
					str_c=str_c.replace("DG:","z");str_c=str_c.replace("DX:","k");
				        str_c=str_c.replace("FA:","q");str_c=str_c.replace("FD:","f");

                (2)使用for循环判断 首先定义一个二维数组,用于实现密码表的保存,设为biao[6][6],然后将字符写入到表格里边,接着将用户输入的明文转化为字符数组str_p[],                             对明文进行遍历,使用判断条件进行对字符进行判断,如果str_p[k]==biao[i][j],则str_c[n++]=biao[i][0]+biao[0][j],循环至加密完所有明文

                        在解密时,可以循环判断biao[i][0]==str_c[k]&&str_c[k+1]==biao[0][j],如果相等,则使得str_p[m++]=biao[i][j],这样就完成了加解密。 


          6、加解密演示:

  图 1要加密的内容


图2 加密后的内容


 图3 恢复后的内容


以上就是Polybius加解密的实现。


Android平台实现具体源代码,如有需要者请私密

相关内容推荐