仿射加密
仿射加密:仿射密码是一种单表替换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。
加密:c = (a*m+b) mod 26 (a,b∈Z 26,且要求gcd(a,26)=1 ,26的因数有1,2,13,26)
解密:m = a -1(c-b) mod 26 (a-1称为a 的逆元)
替换表:
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
求a的逆元:
1 m = 1 2 while True: 3 if a*m%16==1: 4 print(m) 5 break 6 m = m+1
因为a*a-1 = 1,所以a*a-1 mod 26 = 1
求出a的逆元之后,再进行解密:
c = input("请输入密文") for i in c: print(chr(97+(ord(i)-97-b)*m%26),end = '') #b是密钥,m是a的逆元
暴力破解:
1 c = ' ' #密文 2 for i in c: 3 for j in range(0,26): 4 if (a*j+b)%26 == ord(i)-97: 5 print(chr(97+j) , end = '')
这种方法不需要求出乘法逆元
浙公网安备 33010602011771号