You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python简单仿射加密代码Bug排查:输入“A A A”输出异常

仿射加密空格与字母混淆Bug的解决

问题根源

你遇到的Bug大概率是字符遍历逻辑错误或者字母/非字母判断逻辑混乱导致的:

  • 比如手动管理索引时,遇到空格错误地跳过了后续字符;
  • 或者错误地将非字母字符的处理逻辑和字母处理绑定,导致空格后的字母被误判为非字母。

修正方案

采用逐个遍历字符的方式,明确区分字母与非字母:字母执行加密逻辑,非字母(包括空格)直接原样保留,无需额外特殊处理。

修正后的代码

def affine_encrypt(char, a, b):
    # 处理大写字母
    if char.isupper():
        base = ord('A')
        return chr((a * (ord(char) - base) + b) % 26 + base)
    # 处理小写字母
    elif char.islower():
        base = ord('a')
        return chr((a * (ord(char) - base) + b) % 26 + base)
    # 非字母直接返回(比如空格、标点)
    else:
        return char

def encrypt_message(message, a, b):
    encrypted_chars = []
    # 逐个遍历每个字符,不跳过任何元素
    for char in message:
        encrypted_chars.append(affine_encrypt(char, a, b))
    return ''.join(encrypted_chars)

# 测试示例
if __name__ == "__main__":
    # a必须和26互质,这里选a=3,b=5(符合条件)
    print(encrypt_message("A A A", 3, 5))
    # 输出应为加密后的字母+空格+加密后的字母+空格+加密后的字母,比如"F F F"

关键细节

  • 用for char in message遍历,避免手动操作索引导致的跳过错误;
  • 用isupper()/islower()精准判断字母类型,非字母直接返回,确保空格等字符原样保留;
  • 仿射加密中a必须与26互质(即gcd(a,26)=1),否则无法解密,这是仿射加密的核心要求。

内容的提问来源于stack exchange,提问作者Definitely-not-a-crooked monke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:50:55