如何用Python实现双密钥自定义替换的维吉尼亚风格加密?
维吉尼亚加密工具实现问题解答
结论
完全可以实现,无需硬编码完整26字母列表就能完成你描述的所有双密钥加密逻辑。
实现方案
Python内置的ord()(返回字符对应的ASCII编码值)和chr()(将ASCII编码值转回对应字符)函数可以直接完成所有字母映射、偏移计算,不需要提前预定义a-z的完整列表:
- 小写字母的ASCII编码范围固定为
ord('a')(97)到ord('z')(122),大写字母范围为ord('A')(65)到ord('Z')(90),所有字母的位置计算都可以基于这个范围完成。 - 你描述的双密钥逻辑核心实现示例如下,无任何硬编码的字母表:
def encrypt_single_char(plain_char, digit_key, alpha_key_char): # 计算字母类密钥的偏移值 alpha_offset = ord(alpha_key_char.lower()) - ord('a') # 叠加数字类密钥的偏移,模26保证结果落在字母范围内 total_offset = (digit_key + alpha_offset) % 26 # 区分大小写处理 base_code = ord('a') if plain_char.islower() else ord('A') plain_offset = ord(plain_char) - base_code cipher_offset = (plain_offset + total_offset) % 26 return chr(base_code + cipher_offset)
如果需要用数字密钥生成自定义乱序替换表(而非单纯的线性偏移),也可以动态生成字母表再打乱,同样不需要手动硬写26个字母:
import random # 数字密钥作为随机种子,保证每次生成的替换规则一致 random.seed(digit_key) # 动态生成小写字母列表 custom_alphabet = [chr(ord('a') + i) for i in range(26)] # 打乱生成自定义替换表 random.shuffle(custom_alphabet)
其他说明
这种实现方式还可以很方便的扩展特殊字符跳过、大小写保留等适配逻辑,可维护性比硬编码字母表更高。
内容的提问来源于stack exchange,提问作者Thrawn
相关产品推荐
相关产品推荐

