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

请求修复Caesar Cipher暴力破解函数的输出叠加问题

修复凯撒密码暴力破解函数的输出叠加问题

嘿,这个问题我太熟了——你的暴力破解函数之所以会出现输出叠加的问题,核心原因就是存储解密结果的变量没有在每次密钥循环时重置,而是一直在往同一个变量里追加内容!

问题根源分析

举个例子,假设你原来的函数是这样写的:

def brute(ciphertext):
    # 错误:在循环外初始化结果变量,导致每次循环都追加内容
    full_result = ""
    for key in range(26):
        decrypted_chars = ""
        # 这里是你的解密逻辑...
        full_result += f"Key {key}: {decrypted_chars}\n"
    print(full_result)

这里的full_result是在所有密钥循环开始前就创建的,每尝试一个密钥,就把当前结果拼接到这个变量里。这样到密钥2的时候,full_result已经包含了密钥1的结果,自然会出现叠加的情况。

修复方案

解决方法很简单:要么每次循环都重新初始化当前密钥的解密结果变量,要么直接在每次循环结束后打印当前结果,不要先攒到一个大字符串里。

下面是两种修复后的代码示例:

方案1:直接打印每个密钥的结果(最直观)

def brute(ciphertext):
    for key in range(26):
        # 关键:把解密结果变量移到循环内部,每次密钥循环都重新创建
        decrypted = ""
        for char in ciphertext:
            if char.isalpha():
                shifted = ord(char) - key
                # 处理小写字母边界
                if char.islower():
                    if shifted < ord('a'):
                        shifted += 26
                # 处理大写字母边界
                else:
                    if shifted < ord('A'):
                        shifted += 26
                decrypted += chr(shifted)
            else:
                # 非字母字符直接保留
                decrypted += char
        # 直接打印当前密钥的结果,不会叠加
        print(f"Key {key}: {decrypted}")

方案2:用列表收集结果后统一输出(适合需要后续处理的场景)

如果你需要把所有结果保存起来而不是直接打印,可以用列表存储每个密钥的结果,最后再拼接输出:

def brute(ciphertext):
    results = []
    for key in range(26):
        decrypted = ""
        for char in ciphertext:
            # 解密逻辑和上面一致
            if char.isalpha():
                shifted = ord(char) - key
                if char.islower():
                    if shifted < ord('a'):
                        shifted += 26
                else:
                    if shifted < ord('A'):
                        shifted += 26
                decrypted += chr(shifted)
            else:
                decrypted += char
        results.append(f"Key {key}: {decrypted}")
    # 用换行符拼接所有结果,一次性输出
    print("\n".join(results))

效果验证

修复后,每个密钥对应的解密结果都会是独立的:

预期输出:
Key 1: hello world
Key 2: gdkkn vnqkc
...

而不会再出现类似Key 2: hello worldgdkkn vnqkc的叠加情况。

内容的提问来源于stack exchange,提问作者bangers123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:16