数据处理算法-仿射密码加密(Java编码实现)

一、仿射密码基本思路

加法密码和乘法密码结合就构成仿射密码,仿射密码的加密算法是:
C= Ek(m)=(k1*m+k2) mod n
在这里我们规定n=26;其中明文信息为26个小写字母(az)集合,密文为26个大写字母(AZ)集合,然后在对大写字母作进一步操作;秘钥K=(k1,K2)(k1={0,3,5,7,9};K2={0~9});m为小写字母在集合中的位置(如:小写字母为a,则m=0;小写字母若为z,则m=25);通过计算所得结果C为大写字母集合中该位置所对应的大写字母(如:C=0,则所得结果为A;C=25,则所得结果为Z)。

二、仿射密码加密过程

本算法明文信息7个小写字母组成,通过加密算法后得到6字节数据,该数据将作为红外控制码,具体操作如下:

1.从扫描的二维码中顺序取出7小写字母,并提取秘钥(K1为二维码字符串中第一个数字,K2为二维码中最后一个数字);

2.通过计算公式得到对应的7个大写字母,并取对应的ASCII值做如下计算;

3.将所得结果的第一个数据与第二个数据求差(绝对值)作为控制码的第1字节;

4.将第二个数据与第三个数据求和作为控制码的第2字节;

5.将第三个数据与第四个数据求差(绝对值)作为控制码的第3字节;

6.将第四个数据与第五个数据求和作为控制码的第4字节;

7.将第五个数据与第六个数据求差(绝对值)作为控制码的第5字节;

8.将第六个数据与第七个数据求和作为控制码的第6字节;

三、算法示例

若明文信息为abcdefg,密钥K=(3,1);

1.通过计算公式(k1*m+k2) %26,计算得到7个对应的大写字母为:BEHKNQT

2.取7个大写字母对应的ASCII数据为:0x42 0x45 0x48 0x4B 0x4E 0x51 0x54

3.计算得到密文第1字节:0x03 =0x45 -0x42

4.密文第2字节:0x8d = 0x45 +0x48

5.密文第3字节:0x03 = 0x4B -0x48

6.密文第4字节:0x99= 0x4B +0x4E

7.密文第5字节:0x03=0x51-0x4E

8.密文第6字节:0xa5=0x51+0x54

9.所以加密计算之后的6字节红外控制码为:0x03 0x8d 0x03 0x99 0x03 0xa5

四、具体代码如下:

public class FS_encrypt {
   
    //加密
    public static String A_Z = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
    public static String a_z = "abcdefghijklmnopqrstuvwxyz";

    public static void main(String[] args) {
   
        String s = "!B1%D1&D45*D2,F2|F4AAA";
//		(k1*m+k2) mod n
        getResult(s);
    }


    public static int getK1(String s){
   
        int k1 = 0;
        s = s.replaceAll("[^0-9]", "");
        k1 = Integer.parseInt(s.charAt(0) + "");
        System.out.println("k1="</
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值