鱼C论坛

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

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

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

  1. '''
  2. Caesar Cipher
  3. '''

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

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

  9.                 if message == 'quit':
  10.                         print('\n')
  11.                         break
  12.         else:
  13.                 mode = 'decrypt'
  14.                 message = str(input('Input the message you want to decrypt:'))

  15.                 if message == 'quit':
  16.                         print('\n')
  17.                         break

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

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

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

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

  27.                         if mode == 'encrypt':
  28.                                 TranslatedIndex = SymbolIndex + key
  29.                         else:
  30.                                 TranslatedIndex = SymbolIndex - key

  31.                         if TranslatedIndex > len(SYMBOLS):
  32.                                 TranslatedIndex = TranslatedIndex - len(SYMBOLS)
  33.                         elif TranslatedIndex < 0:
  34.                                 TranslatedIndex = TranslatedIndex + len(SYMBOLS)

  35.                         translated += SYMBOLS[TranslatedIndex]

  36.                 else:
  37.                         translated += symbol

  38.         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, 2024-4-20 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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