如何用Python实现基于自定义字典映射的密码加解密功能
自定义替换加密/解密Python实现
常见问题排查
你之前代码运行异常大概率是因为使用了dict作为变量名,dict是Python内置的字典类关键字,覆盖后会导致字典相关功能异常,另外数字映射需要统一为字符串类型,避免加密后出现整数和字符串混合的情况,影响后续数据库存储。
完整实现代码
# 自定义加密映射,按需补全所有A-Z大写字母的对应规则 encrypt_map = { 'A': 'O', 'B': 'P', 'C': 'J', # 此处省略其他字母映射,自行补全 'Z': 'Z' } # 自动生成0-9数字倒序映射,统一使用字符串类型 for num in range(10): encrypt_map[str(num)] = str(9 - num) # 自动生成解密映射,直接反转加密映射的键值对 decrypt_map = {cipher: plain for plain, cipher in encrypt_map.items()} def encrypt(plain_text: str) -> str: """加密函数,输入明文返回密文""" # 若需要支持小写字母输入,可先统一转大写,不需要可删除下一行 plain_text = plain_text.upper() cipher_chars = [] for char in plain_text: cipher_chars.append(encrypt_map.get(char, char)) return ''.join(cipher_chars) def decrypt(cipher_text: str) -> str: """解密函数,输入密文返回明文""" plain_chars = [] for char in cipher_text: plain_chars.append(decrypt_map.get(char, char)) return ''.join(plain_chars)
使用示例
# 测试代码 print(encrypt("ABC123")) # 输出:OPJ876 print(decrypt("OPJ876")) # 输出:ABC123
可选优化方案
- 若用于存储用户登录密码,不要使用可逆加密,直接使用
bcrypt、argon2等单向加盐哈希算法,无需解密,验证时直接对比哈希值即可,安全性远高于自定义加密逻辑。 - 若确实需要可逆加密存储敏感数据,建议使用标准对称加密算法如AES,可借助
PyCryptodome库实现,不要使用自定义单表替换密码,这类密码很容易通过频率分析破解,安全性极低。
内容的提问来源于stack exchange,提问作者noobcoder333
相关产品推荐
相关产品推荐

