Почему этот код выводит сообщение об ошибке после успеха? - PullRequest
0 голосов
/ 26 апреля 2011
  if data.find('!mdcrack') != -1:
     nick = data.split('!')[ 0 ].replace(':','')
     m = hashlib.md5()
     hash = ""
     hash_file = str(arg[4])
     wordlist = arg[5]
     try:
         wordlistfile = open(wordlist,"r")
     except IOError:
         sck.send('PRIVMSG ' + chan + " :" 'invalid file' + '\r\n')
     else:
       pass
     for line in wordlistfile:
                 m = hashlib.md5()  
                 line = line.replace("\n","")
                 m.update(line)
                 word_hash = m.hexdigest()
                 if word_hash==hash_file:
                      sck.send('PRIVMSG ' + chan + " :" 'Collision!  The word corresponding to the given hash is ' + line + '\r\n')

     sck.send('PRIVMSG ' + chan + " :" 'The hash given does not correspond to any supplied word in the wordlist' + '\r\n')

Код функционирует, хешируя каждую строку из списка слов, а затем сравнивая ее с указанным хешем.

Я не получаю никаких ошибок, но когда он находит хеш, он печатает сообщение Collision! плюс сообщение The hash given does not correspond to any supplied word in the wordlist, сначала мне показалось, что это была проблема с идентичностью, но теперь я ничего не понимаю.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Наверняка будет напечатано «PRIVSG [..] Collision», а после «PRIVSG [..] хэш дан».

Что вам нужно сделать, это:

collision = False
[..] 
if word_hash==hash_file:
                      sck.send('PRIVMSG ' + chan + " :" 'Collision!  The word corresponding to the given hash is ' + line + '\r\n')
                      collision = True

if not collision
     sck.send('PRIVMSG ' + chan + " :" 'The hash given does not correspond to any
1 голос
/ 26 апреля 2011

Если вы не хотите, чтобы сообщение «хэш не соответствует» отправлялось после обнаружения коллизии, вам необходимо вернуться из функции (или иным образом предотвратить провал кода) после «Столкновения! " сообщение отправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...