java实现波雷费密码算法示例代码

  


  

  

波雷费密码是一种对称式密码,是首种双字母取代的加密法。
  

  

下面描述算法步骤:

  

1,从1号二维码M05,提取明文信息和密文,M05格式:& lt; xxx…xxx | yyy…yyy>,其中明文xxx…xxx,密钥部分信息为yyy…yyy中的提取所有英文字母信息。

  

2,将提取的英文字母作密匙。除去重复出现的字母。将密匙的字母逐个逐个加入5×5的矩阵内,剩下的空间将未加入的英文字母依a - z的顺序加入。(将问去除)

  

3,将要加密的讯息分成两个一组。若组内的字母相同,将X加到该组的第一个字母后,重新分组。若剩下一个字,也加入X字。

  

4,在每组中,找出两个字母在矩阵中的地方。
  若两个字母不同行也不同列,在矩阵中找出另外两个字母,使这四个字母成为一个长方形的四个角。
  若两个字母同行,取这两个字母右方的字母(若字母在最右方则取最左方的字母)。
  若两个字母同列,取这两个字母下方的字母(若字母在最下方则取最上方的字母)。

  

5,新找到的两个字母就是原本的两个字母加密的结果。

  

6,取密文前3个字符与后三个字符(大写字母)作为对应6位的红外报警开启码。

  


  

  

例:二维码内容为:& lt; hidethegold | play5fair9example>。
  

  

1。明文信息hidethegold和密匙playfairexample
  

  

2。根据密钥形成5 * 5的矩阵。

        F P L Y   I R E X M   B C D G H   J K N O S   T U V W Z      

3。明文处理为:“嗨DE TH如OL DX”

  

4。就会得到密文:“BM ND ZB XD KY通用电气”,

  

5。取密文前6个字符(大写字母)对应6位的报警码:0×,0 x4d 0 x4e 0 x44 0 x5a 0×

  

        进口sun.applet.Main;      公开课blf {   公共静态void main (String [] args) {   字符串s=" & lt; hidethegold | play5fair9example>”;   get_blf(年代);   }      公共静态孔隙get_blf(字符串sss) {   字符串eng=癆BCDEFGHIJKLMNOPRSTUVWXYZ”;   字符串求=ssss.replaceAll (“[& lt;在0 - 9]"," ");   String[]党卫军=beg.split (“\ \ |”);   字符串mw=党卫军[0].toUpperCase ();   字符串str=党卫军[1].toUpperCase ();   str=removeMethod (str);   System.out.println (str);   int b=str.length ()/5;   int y=str.length () % 5;   System.out.println (y);   System.out.println (bs);      char [] [] arr=新char [5] [5];   for (int i=0;我& lt;废话;我+ +){   arr[我]=str.subSequence(我* 5 (i + 1) * 5) .toString () .toCharArray ();   }   字符串)yss=str.subSequence (b * 5 (b * 5 + y) .toString ();   其他=eng字符串。replaceAll (“[+ str +“]”, " ");   system . out。println(“其他=" +其他);   arr [b]=() yss + other.subSequence (0, (5-ys))) .toString () .toCharArray ();      int bs1=b + 1;//把余数补全   int oth=25 - (bs1 * 5);//剩下的长度   其他=W有蛄?(5 - y) (oth + 5 - y) .toString ();      system . out。println(“其他=" +其他);         int c=5 - bs1;   system . out。println (c=" + c);   for (int i=0;我& lt;c;我+ +){   system . out。println (“bs1=" + bs1);   arr (bs1 + +)=W有蛄?我* 5 (i + 1) * 5) .toString () .toCharArray ();   }      for (int i=0;我& lt;arr.length;我+ +){   for (int j=0;j & lt;加勒比海盗[我]. length;j + +) {   system . out。打印(arr[我][j] + \ t);   }   System.out.println ();   }//arr [0]=");   字符串s2=" ";      for (int i=0;我& lt;s1.length;我+ +){   s2 +=解决(加勒比海盗,s1[我]);   }   System.out.println (s2);   字符串鳍=" ";   for (int i=0;我& lt;6;我+ +){   鳍+=s2.charAt(我);   }      byte [] br=fin.getBytes ();   for (int i=0;我& lt;br.length;我+ +){   System.out.print (decimalToHex (br[我])+“t \”);   }   }      公共静态字符串解析(char[][]加勒比海盗,字符串s1) {   int=99;   int b=99;   int a1=99;   int b1=99;   字符串res=" ";   for (int i=0;我& lt;arr.length;我+ +){   for (int j=0;j & lt;加勒比海盗[我]. length;j + +) {   如果((arr[我][j]==s1.charAt (0))) {=我;   b=j;   }else if (arr[我][j]==s1.charAt (1)) {   a1=我;   b1=j;   }   如果((!=99),,(b !=99),,(a1 !=99),,(b1 !=99)) {   如果(((a1 - a) !=0),,(((b1 - b) !=0))) {   res=" + arr[一](b1) + arr [a1] [b];   }else if ((a1 -==0),,(b1 - b !=0)) {   如果((b==4)) {   res=" + arr[一][0]+ arr [a1] (b1 + 1);   }else if (b1==4) {   res=" + arr arr[一][b + 1] + [a1] [0];   其他}{   res=" + arr arr[一][b + 1] + [a1] (b1 + 1);   }   }else if ((a1 - !=0),,(b1 - b==0)) {   如果((==4)){   res=" + arr [0] [b] + arr [a1 + 1] (b1);   }else if (a1==4) {   res=" + arr arr [+ 1] [b] + [0] (b1);   其他}{   res=" + arr arr [+ 1] [b] + [a1 + 1] (b1);   }   }   }   }   }   返回res;   }      公共静态字符串removeMethod (String s) {   StringBuffer某人=new StringBuffer ();   int len=s.length ();   for (int i=0;我& lt;兰;我+ +){   字符c=s.charAt(我);   如果(s.indexOf (c)==s.lastIndexOf (c)){//此字符第一次位置和最后位置一致即肯定没有重复的直接添加   sb.append (c);   }{//同其他理次字符出现过多次   int fristposition=s.indexOf (c);//次字符第一次出现的位置   如果(fristposition==我){//第一次出现的位置和当前位置一致即第一次出现添加   sb.append (c);   }   }   }   返回sb.toString ();   }      公共静态字符串decimalToHex(字节小数){   十六进制字符串=" ";   而(小数!=0){   int hexValue=https://www.yisu.com/zixun/decimal % 16;   十六进制=toHexChar (hexValue) +十六进制;   十进制=(字节)(十进制/16);   }   返回十六进制;   }//将0 ~ 15的十进制数转换成0 ~ F的十六进制数   公共静态字符toHexChar (int hexValue) {   如果(hexValue

java实现波雷费密码算法示例代码