仿射密码是一种替换密码。它是一个字母对一个字母的。它的加密函数是e(x)=ax+b(mod m),其中a和m互质,m是字母的数目。解码函数是d(x)=a^-1(x-b)(mod m),其中是a在Z(m)群的乘法逆元。
仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母。 其仍有所有替代密码之弱处。所有字母皆借由方程ax+b(mod 26)加密,b为移动大小。**
习题举例
密文UCR 是由仿射函数9x+2(mod 26)加密的。求明文。
解:y=9x+2(mod 26)→x=(1/9)(y-2)(mod26). 9K ≡1(mod26)→K=3(为乘法逆元)
∴x ≡3(y-2)=3y-6≡3y+20(mod26)
∴U:320+20(mod26) ≡2→c ;C:32+20(mod26) ≡0→a ; R:317+20(mod26) ≡19→t ∴明文为:cat
加密代码
discryptstr=input()
a=int(input())
b=int(input())
c=[]
for i in range(len(discryptstr)):
# 加密成相应的大写字母
c.append(chr(((ord(discryptstr[i]) - 97) * a + b) % 26 + 65))
d = ' '.join(c)
print(d)
解密代码
flag="daijiamizifuchuan"
flaglist=[]
for i in flag:
flaglist.append(ord(i)-97)
newflag=""
a=int(input())
b=int(input())
for i in flaglist:
for j in range(0,26):
c = (a * j + b) % 26
if(c == i):
newflag += chr(j+97)
print(newflag)
posted on
浙公网安备 33010602011771号