lijiachen 发表于 2020-6-30 18:25:08

凯撒加密破解后与原文不符......

代码是这样的:

'''
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

                else:
                        translated += symbol

        print(translated)


当message = 'message',key = 12时,加密结果为yg55msg,解密后竟然变成了mUssagU。{:10_243:}
求大佬解答,悬赏5鱼币。

comeheres 发表于 2020-6-30 18:25:09

低级错误:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopgrstuvwxyz1234567890 !?.:

lijiachen 发表于 2020-6-30 18:59:52

本帖最后由 lijiachen 于 2020-6-30 19:02 编辑

没人{:10_269:}

阴阳神万物主 发表于 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]
查看完整版本: 凯撒加密破解后与原文不符......