【密码学】代换密码之Python实现 | 您所在的位置:网站首页 › cd5954cb代换 › 【密码学】代换密码之Python实现 |
简述 代换密码是古典密码中的典型例子,采用单表代换的方式进行加密。 单表代换即在原始顺序的26个字母表的基础上,通过改变字母位置而生成无序的26字母表,该字母表就是本次加密的密钥。 比如在下表中,大写字母即初始字母表,其对应的小写字母,就是变换顺序后的字母表,也就是密钥。 作为古典密码,代换密码的加密过程很简单,当给出本次加密的密钥时,只需要将明文字母用其对应的密钥字母进行替代,就完成了加密。 比如置换表如下: 由于代换密码的加密实质是形成明文与密文的一一映射关系,因此解密过程和加密相同,其实就是将密文对照其加密所用的置换表,得出明文。 由上述置换表得出其逆置换表: 使用代码实现主要分一下三个步骤: 1、生成随机置换表(即:初始字母表和随机的密钥字母表); 2、将输入的明文进行处理,使其在置换表中找出对应的密文字母; 3、将输入的密文进行处理,将密文反向代入置换表中找出对应的明文字母。 代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253import random, reinitialForm = [] # 初始字母表resultForm = [] # 置换字母表letterList = [] # 顺序字母列表# 生成置换表def creatForm(): # 生成初始表格(A-Z) for i in range(ord("A"), ord("Z") + 1): initialForm.append(chr(i)) letterList.append(chr(i + 32)) # 生成置换表格(随机顺序) while len(resultForm) < 26: letter = random.choice(letterList) letterList.remove(letter) resultForm.append(letter)# 加密def encrypt(massage): ciphertext = "" for i in massage: ciphertext += resultForm[initialForm.index(i)] return ciphertext# 解密def decrypt(massage): print(massage) plaintext = "" for i in massage: plaintext += initialForm[resultForm.index(i)] return plaintextif __name__ == "__main__": creatForm() while True: print("1、Encrypt 2、Decrypt 3、Show Form") choice = int(input("Please choose(Input number):")) if choice == 1: # 使用正则过滤非字母并转换为大写 plaintext = (re.sub("[^a-zA-Z]", "", input("Input plaintext:"))).upper() ciphertext = encrypt(plaintext) print("ciphertext:", ciphertext) elif choice == 2: # 使用正则过滤字母并转换为小写 ciphertext = (re.sub("[^a-zA-Z]", "", input("Input ciphertext:"))).lower() plaintext = decrypt(ciphertext) print("plaintext:", plaintext) elif choice == 3: print("The Form Of This Operation:\n", initialForm, "\n", resultForm) else: print("Input error!") 结果1、输入明文“HELLOW”,对其加密: |
CopyRight 2018-2019 实验室设备网 版权所有 |