如何基于自定义criptgraphy开发Python加解密程序?
自定义Python加解密程序实现方案
嘿,我来帮你搞定这个自定义加解密程序!首先得明确你的规则本质是单字母替换加密——每个小写字母对应一个固定的长字符串,加密就是把明文里的小写字母替换成对应字符串,解密则是反向操作。下面是具体实现步骤和代码:
1. 整理映射字典
首先把你给出的字母-字符串对应关系整理成Python字典,这是整个加解密逻辑的核心。注意你提供的y对应的字符串不完整,记得补充完整后替换到字典里:
# 加密字典:小写字母 → 对应的密文字符串 encrypt_map = { 'a': "v07u4tLKinfa", 'b': "zz45tTn8u4o0", 'c': "W46tEr10d01z", 'd': "5aPSCr36quA7", 'e': "Zg6pPrg17t15", 'f': "Po84cr3Ud25M", 'g': "L0l1crXtOO11", 'h': "7G1CaZ2wBg9f", 'i': "Z1Yd84we71y3", 'j': "LL6TRe0yR4tj", 'k': "kt426ug76Vz3", 'l': "26IzOZyrXCt4", 'm': "Z3uj09HJ6Iou", 'n': "0d2Wna13lERT", 'o': "N935efQef3JH", 'p': "7j43Ghnf6R4o", 'q': "dF13Rw9nX6i8", 'r': "DOu3fw073r81", 's': "3C0w23rTg5Ij", 't': "TE436nyWi5ee", 'u': "58Ybt78n3e06", 'v': "39j8rH9TYrcO", 'w': "0NAtO48veQM7", 'x': "K2uC2tgEVBn4", 'y': "9nRm03xxxxxx" # 替换成你完整的y对应字符串 } # 解密字典:密文字符串 → 小写字母,直接反转加密字典即可 decrypt_map = {v: k for k, v in encrypt_map.items()}
2. 实现加密函数
加密逻辑很简单:遍历明文的每个字符,小写字母用映射替换,其他字符(比如大写、数字、空格、符号)直接保留:
def custom_encrypt(plaintext): ciphertext = [] for char in plaintext: # 小写字母替换成对应密文,非小写字母原样保留 if char.islower(): ciphertext.append(encrypt_map.get(char, char)) else: ciphertext.append(char) return ''.join(ciphertext)
3. 实现解密函数
观察你给出的密文字符串,发现它们都是12位长度,所以我们可以按固定12位分割密文块,再反向映射回字母。如果有长度不统一的密文字符串,可以用后面的可变长度版本:
固定长度版本(推荐,效率更高)
def custom_decrypt(ciphertext): plaintext = [] block_size = 12 # 所有密文字符串的长度 # 按12位分割密文,逐个块解密 for i in range(0, len(ciphertext), block_size): block = ciphertext[i:i+block_size] # 完整块查解密字典,不足12位的部分直接保留 if len(block) == block_size: plaintext.append(decrypt_map.get(block, block)) else: plaintext.append(block) return ''.join(plaintext)
可变长度版本(适配不同长度的密文字符串)
如果你的密文字符串长度不统一,用这个版本会更稳妥(按最长优先匹配,避免短字符串先匹配导致错误):
def custom_decrypt_variable_length(ciphertext): plaintext = [] i = 0 while i < len(ciphertext): matched = False # 按密文字符串长度从长到短匹配,避免匹配错误 for key in sorted(decrypt_map.keys(), key=len, reverse=True): if ciphertext.startswith(key, i): plaintext.append(decrypt_map[key]) i += len(key) matched = True break # 没找到匹配的密文块,直接保留当前字符 if not matched: plaintext.append(ciphertext[i]) i += 1 return ''.join(plaintext)
4. 测试代码
你可以用下面的代码测试加解密功能是否正常:
# 测试加密 test_plain = "hello world!" cipher = custom_encrypt(test_plain) print(f"加密后的密文: {cipher}") # 测试解密(用固定长度版本) decrypted_plain = custom_decrypt(cipher) print(f"解密后的明文: {decrypted_plain}")
注意事项
- 确保所有字母对应的密文字符串是唯一的,否则解密时会出现歧义(比如两个字母对应同一个字符串,无法确定还原哪个)。
- 如果需要支持大写字母或其他字符的加密,只需在
encrypt_map里补充对应的键值对即可。 - 如果密文可能被截断,解密时最后一段不足12位的内容会被原样保留,你可以根据需求调整这部分逻辑。
内容的提问来源于stack exchange,提问作者Ferontwix
相关产品推荐
相关产品推荐

