如何用加密密钥替换序列字符?Python加密程序开发求助
字符替换加密程序实现方案
问题描述
正在开发一个小型加密程序,需求是让用户输入语句或序列后,程序将序列中的每个字母、数字、符号替换为对应的加密密钥,目前已编写部分代码,但不清楚后续实现方法。代码如下:
A = '@' B = '`' C = ':' D = '$' E = '%' F = '^' G = '&' H = '*' I = '(' J = ')' K = '-' L = '_' M = '+' N = '=' O = '!' P = '~' Q = '9' R = '5' S = '2' T = '6' U = '1' V = '8' W = '7' X = '4' Y = '?' Z = '/' a = '@!' b = '#$' c = '%^' d = '&(d)' e = '!@' f = '~~' g = '*(' h = '+)' i = '<3' j = '[]' k = '{}}' l = '||' m = '*£' n = ';n;' o = '/[' p = '^(' q = '{£' r = '>_<' s = '\_/' t = '-:-' u = '^%^' v = '/\' w = '\|' x = '&(' y = ':<' z = ',.' def encryption(): sequence = str(input("Please input the sequence you want encrypted. "))
注:该程序仅用于学习并非正式加密工具,可公开密钥。
实现步骤与优化
1. 用字典统一存储字符映射
原代码用单个变量存储每个字符的密钥,不便于后续查找和维护,建议将所有映射关系存入一个字典,键是原字符,值是对应的加密密钥:
char_map = { # 大写字母映射 'A': '@', 'B': '`', 'C': ':', 'D': '$', 'E': '%', 'F': '^', 'G': '&', 'H': '*', 'I': '(', 'J': ')', 'K': '-', 'L': '_', 'M': '+', 'N': '=', 'O': '!', 'P': '~', 'Q': '9', 'R': '5', 'S': '2', 'T': '6', 'U': '1', 'V': '8', 'W': '7', 'X': '4', 'Y': '?', 'Z': '/', # 小写字母映射 'a': '@!', 'b': '#$', 'c': '%^', 'd': '&(d)', 'e': '!@', 'f': '~~', 'g': '*(', 'h': '+)', 'i': '<3', 'j': '[]', 'k': '{}}', 'l': '||', 'm': '*£', 'n': ';n;', 'o': '/[', 'p': '^( ', 'q': '{£', 'r': '>_<', 's': '\\_/', 't': '-:-', 'u': '^%^', 'v': '/\\', 'w': '\\|', 'x': '&(', 'y': ':<', 'z': ',.' }
注意:原代码中v = '/\'和w = '\|'存在转义字符错误,已修正为v = '/\\'和w = '\\|',避免语法报错。
2. 实现字符替换逻辑
在encryption函数中,遍历输入字符串的每个字符,从字典中查找对应的加密值,若字符不在字典中则保留原字符(可根据需求调整处理方式):
def encryption(): sequence = input("Please input the sequence you want encrypted. ") encrypted_result = [] for char in sequence: # 查找映射,不存在则用原字符 encrypted_char = char_map.get(char, char) encrypted_result.append(encrypted_char) # 拼接所有加密后的字符得到结果 encrypted_str = ''.join(encrypted_result) print(f"Encrypted sequence: {encrypted_str}")
3. 调用函数执行程序
最后添加函数调用,让程序可以运行:
if __name__ == "__main__": encryption()
完整代码
char_map = { # 大写字母映射 'A': '@', 'B': '`', 'C': ':', 'D': '$', 'E': '%', 'F': '^', 'G': '&', 'H': '*', 'I': '(', 'J': ')', 'K': '-', 'L': '_', 'M': '+', 'N': '=', 'O': '!', 'P': '~', 'Q': '9', 'R': '5', 'S': '2', 'T': '6', 'U': '1', 'V': '8', 'W': '7', 'X': '4', 'Y': '?', 'Z': '/', # 小写字母映射 'a': '@!', 'b': '#$', 'c': '%^', 'd': '&(d)', 'e': '!@', 'f': '~~', 'g': '*(', 'h': '+)', 'i': '<3', 'j': '[]', 'k': '{}}', 'l': '||', 'm': '*£', 'n': ';n;', 'o': '/[', 'p': '^( ', 'q': '{£', 'r': '>_<', 's': '\\_/', 't': '-:-', 'u': '^%^', 'v': '/\\', 'w': '\\|', 'x': '&(', 'y': ':<', 'z': ',.' } def encryption(): sequence = input("Please input the sequence you want encrypted. ") encrypted_result = [] for char in sequence: encrypted_char = char_map.get(char, char) encrypted_result.append(encrypted_char) encrypted_str = ''.join(encrypted_result) print(f"Encrypted sequence: {encrypted_str}") if __name__ == "__main__": encryption()
关键说明
- 使用字典存储映射关系,相比单个变量更易于维护和查找,后续添加数字、符号的映射只需在字典中补充键值对即可。
char_map.get(char, char)方法会优先查找字符对应的加密值,若找不到则返回原字符,避免程序报错。- 用列表
encrypted_result收集加密后的字符,最后用join拼接成字符串,比直接字符串拼接更高效。
内容的提问来源于stack exchange,提问作者Calax
相关产品推荐
相关产品推荐

