波雷费密码算法-java实现

一、算法描述

波雷费密码是一种对称式密码,是首种双字母取代的加密法。
下面描述算法步骤:

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

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

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

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

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

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

二、算法过程示例

例:二维码内容为:<hidethegold|play5fair9example>。
1.明文信息hidethegold和密匙playfairexample
  
2.根据密钥形成5*5的矩阵。

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

3.明文处理为:“HI DE TH EG OL DX”

4.就会得到密文:“BM ND ZB XD KY GE”,

5.取密文前6个字符(大写字母)对应6位的报警码:0X42,0X4D,0X4E,0X44, 0X5A, 0X42

三、具体代码如下:

import sun.applet.Main;

public class blf {
   
    public static void main(String[] args) {
   
        String s = "<hidethegold|play5fair9example>";
        get_blf(s);
    }

    public static void get_blf(String ssss){
   
        String eng = "ABCDEFGHIJKLMNOPRSTUVWXYZ";
        String beg = ssss.replaceAll("[<>0-9]", "");
        String []ss = beg.split("\\|");
        String mw = ss[0].toUpperCase();
        String str = ss[1].toUpperCase();
        str = removeMethod(str);
        System.out.println(str);
        int bs = str.length() / 5;
        int ys = str.length() % 5;
        System.out.println(ys);
        System.out.println(bs);

        char[][] arr = new char[5][5];
        for (int i = 0; i < bs; i++) {
   
            arr[i] = str.subSequence(i * 5, (i+1) * 5).toString().toCharArray();
        }
        String yss = str.subSequence(bs*5, (bs*5+ys)).toString();
        String other = eng.replaceAll("["+ str +<
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值