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

一、仿射密码基本思路

加法密码和乘法密码结合就构成仿射密码,仿射密码的加密算法是: C= Ek(m)=(k1m+k2) mod n 而与之对应的解密算法为:M= Dk©=k3(c- k2) mod n(其中(k3 ×k1)mod 26 = 1,若c<k2,则使用公式 M= Dk©= (k3(c- k2) mod n) +26). 在这里我们规定n=26;其中密文信息为26个大写字母(az)集合,明文为26个小写字母(AZ)集合,然后在对小写字母作进一步操作;加密秘钥K=(k1,K2)(k1={0,3,5,7,9};K2={0~9});由二维码中提取,参数K3为K1的模逆(若a,b两数的乘积对正整数n取模的结果为1. 则称a,b 互为另外一个的模逆),即(K3K1) mod 26 = 1;在这里K3取K1最小的模逆。在解密公式中c为大写字母在集合中的位置(如:大写字母为A,则c=0;大写字母若为Z,则c=25);通过计算所得结果M为小写字母集合中该位置所对应的小写字母(如:M=0,则所得结果为a;M=25,则所得结果为z)。

二、仿射密码解密过程

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

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

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

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

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

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

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

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

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

三、算法示例

若明文信息为ABCDEFG,密钥K=(3,1),则K3=9;

1.通过计算公式(k3*(c- k2))%26,计算得到7个对应的小写字母为:rajsbkt

2.取7个小写字母对应的ASCII数据为:0x72 0x61 0x6A 0x73 0x62 0x6B 0x74

3.计算得到密文第1字节:0x11=0x72-0x61;

4.密文第2字节:0xcb =0x61+0x6A

5.密文第3字节:0x09 =0x73-0x6A

6.密文第4字节:0xd5 =0x73+0x62

7.密文第5字节:0x09 =0x6b-0x62

8.密文第6字节:0xdf =6b+0x74

9.所以解密计算之后的6字节红外控制码为:0x11 0xcb 0x09 0xd5 0x09 0xdf

经验分享 程序员 微信小程序 职场和发展