凯撒加密破解后与原文不符......
代码是这样的:'''
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鱼币。 低级错误:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopgrstuvwxyz1234567890 !?.: 本帖最后由 lijiachen 于 2020-6-30 19:02 编辑
没人{:10_269:}
这段代码,总体上来说,是一个粗糙的代码。
有些地方可以简化。
从给出的例子来说,我就先不分析加密过程了。
而代码的解密过程,出错的是 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]