仿射加解密程序——python
假设X,Y,a,b是Z52整数环中的元素,a和b为密钥,X是原文,Y是密文
加密函数:Y=(aX+b)%52
获取乘法逆元
通过扩展的欧几里得算法求a的乘法逆元
加密过程
加密函数:Y=(aX+b)%52
解密过程
解密函数:X=(a的逆元)*(Y-B)%52
Z52整数环是一个从a,b,c……Z,A,B……Z,总共52个字母的字符串,可以用python中的string.ascii_letters模块得到。
import string # 加密 def encrypt(k1, k2, message): str_list = string.ascii_letters t = "" for i in message: if i.isalpha(): i = (str_list.index(i) * k1 + k2) % 52 t += str_list[i] else: t += i return t # 获取a的逆元 def get_inverse(a): for i in range(1, 52): if a*i % 52 == 1: return i # 解密 def decrypt(k1, k2, message): a_inv = get_inverse(k1) str_list = string.ascii_letters t = "" for i in message: if i.isalpha(): i = (str_list.index(i) - k2)*a_inv % 52 t += str_list[i] else: t += i return t def main(): mode = int(input()) message = input() key1 = int(input()) key2 = int(input()) if mode == 1: translated = encrypt(key1, key2, message) else: translated = decrypt(key1, key2, message) print(translated) if __name__ == '__main__': main()

浙公网安备 33010602011771号