鱼C论坛

 找回密码
 立即注册
查看: 1282|回复: 3

[已解决]凯撒加密破解后与原文不符......

[复制链接]
发表于 2020-6-30 18:25:08 | 显示全部楼层 |阅读模式
5鱼币
代码是这样的:
'''
Caesar Cipher
'''

while True:
        choice = str(input('You want to encrypt or decrypt?\na ). encrypt\nb ). decrypt\n')).lower()

        if choice == 'a':
                mode = 'encrypt'
                message = str(input('Input the message you want to encrypt:'))

                if message == 'quit':
                        print('\n')
                        break
        else:
                mode = 'decrypt'
                message = str(input('Input the message you want to decrypt:'))

                if message == 'quit':
                        print('\n')
                        break

        try:
                key = int(input('Input the encrypt key:'))

        except ValueError:
                print('Input wrong message or key!')

        SYMBOLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopgrstuvwxyz1234567890 !?.:'
        translated = ''

        for symbol in message:
                if symbol in SYMBOLS:
                        SymbolIndex = SYMBOLS.find(symbol)

                        if mode == 'encrypt':
                                TranslatedIndex = SymbolIndex + key
                        else:
                                TranslatedIndex = SymbolIndex - key

                        if TranslatedIndex > len(SYMBOLS):
                                TranslatedIndex = TranslatedIndex - len(SYMBOLS)
                        elif TranslatedIndex < 0:
                                TranslatedIndex = TranslatedIndex + len(SYMBOLS)

                        translated += SYMBOLS[TranslatedIndex]

                else:
                        translated += symbol

        print(translated)

当message = 'message',key = 12时,加密结果为yg55msg,解密后竟然变成了mUssagU。
求大佬解答,悬赏5鱼币。
最佳答案
2020-6-30 18:25:09
低级错误:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopgrstuvwxyz1234567890 !?.:

最佳答案

查看完整内容

低级错误:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopgrstuvwxyz1234567890 !?.:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 18:25:09 | 显示全部楼层    本楼为最佳答案   
低级错误:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopgrstuvwxyz1234567890 !?.:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-30 18:59:52 | 显示全部楼层
本帖最后由 lijiachen 于 2020-6-30 19:02 编辑

没人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 20:26:24 | 显示全部楼层
这段代码,总体上来说,是一个粗糙的代码。
有些地方可以简化。

从给出的例子来说,我就先不分析加密过程了。
而代码的解密过程,出错的是 g -> e,解成了 g -> U.
g 在符号表里的第一个索引为 32 减去 12 得 20 ,0 < 20 < len(SYMBOLS),对应的正是 U.

从解密看不出问题,那么,分析加密。
e 在符号表里的第一个索引为 30 加上 12 得 42 ,0 < 42 < len(SYMBOLS),对应的正是 g.

对应关系没有错,但是一看索引,问题就特别明显,那就是符号表里至少有两个 g.

上边是我分析代码问题的一般思路,当然,这是在直接得到代码反馈的时候,要是肉眼观察,虽然慢一些,但也是能看出问题的。


最方便的解决办法:检查并修改 SYMBOLS 的内容。

评分

参与人数 1鱼币 +1 收起 理由
lijiachen + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 03:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表