仿射加密

仿射加密:仿射密码是一种单表替换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。

加密: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 = '')

这种方法不需要求出乘法逆元

posted on 2021-05-14 09:57  laolaiyi  阅读(471)  评论(0)    收藏  举报