-2

我正在尝试循环解密消息 10 次,但我得到的结果非常不同,我不知道为什么。下面是我的代码。我使用相同的代码进行加密和解密。我只需要更改newchar = newchar-shfit. 使用相同的代码进行循环会得到非常不同的结果。

  num1=0
  shift=0

  print("Brute force")

  question=input(print("Please enter something to decrypt: "))
  decryptedword = ""
  while num1<10 and shift <10 :


      for character in question:
          newchar = ord(character)
          newchar = newchar - shift
      if newchar < 32:
         newchar = newchar + 95
      elif newchar > 126:
         newchar = newchar - 95
      decryptedword = decryptedword + chr(newchar)


      print(num1,"decrypted word: ",decryptedword)
      num1=num1+1
      shift=shift+1

例如,如果asdasd输入输入,我得到:

1个解密词:a

2 解密字:ar

3 解密字:arb

4 解密字:arb^

5 解密字:arb^o

6 解密字:arb^o_

好的,关于它应该如何的示例输出,如果我输入dvg,我应该得到:

1个解密词:fxi

2 解密词:asd

3 解密字:ewh

等等..

4

2 回答 2

2

好吧,您shift每次循环迭代都会增加值,因此每次迭代都会改变您的密钥。而且由于每次迭代都在增加密钥 ( shift),因此每次迭代的解密结果也不同。

如果删除此行shift=shift+1,则每次迭代的解密消息都应该相同。
(EDIT3:我不知道如何“删除”文本,但以上几行应该被忽略,因为我误解了作者的问题。)

编辑:还有一点,你的缩进似乎是错误的。该if ; elif语句缩进,就好像它们不是循环的一部分,这也会导致意外行为。
EDIT2:此外decryptedword = ""应该在循环内,因此每次迭代都会重置。

   num1=0
   shift=0


  print("Brute force")

  question=input(print("Please enter something to decrypt: "))
  while num1<10 and shift <10 :
      decryptedword = ""

      for character in question:
          newchar = ord(character)
          newchar = newchar - shift
          if newchar < 32:
             newchar = newchar + 95
          elif newchar > 126:
             newchar = newchar - 95
          decryptedword = decryptedword + chr(newchar)

      print(num1,"decrypted word: ",decryptedword)
      num1=num1+1
      shift=shift+1
于 2013-09-17T11:59:17.603 回答
2

您的缩进都是错误的 - if 语句需要在 for 循环中

print("Brute force")

question=input(print("Please enter something to decrypt: "))
decryptedword = ""
while num1 < 10 and shift < 10:

for character in question:
    newchar = ord(character)
    newchar = newchar - shift
    if newchar < ord(' '):
        newchar = newchar + 95
    elif newchar > ord('~'):
        newchar = newchar - 95
    decryptedword = decryptedword + chr(newchar)


print(num1, "decrypted word: ", decryptedword)
num1 = num1 + 1
shift = shift + 1
于 2013-09-17T12:10:11.900 回答