【问题标题】:Why md5 hash of a word from a file doesn't match the hash of a string?为什么文件中单词的 md5 哈希与字符串的哈希不匹配?
【发布时间】:2017-06-04 17:40:27
【问题描述】:

我正在尝试创建一个 python 程序,它可以从字典中读取单词,创建一个 md5 散列并将其与给定的散列进行比较。

当我尝试比较两个尚未从文件中读取的单词哈希时,一切正常:

if hashlib.md5(b"string").hexdigest() == "b45cffe084dd3d20d928bee85e7b0f21":
    print("Equal!")

但是当我从文件中逐行读取单词时,单词的哈希值是不同的。代码如下所示:

f = open('short.txt', 'r')

stringHash = 'b45cffe084dd3d20d928bee85e7b0f21'

for line in f:

   if stringHash == hashlib.md5(line.encode('utf_8')).hexdigest():
       print("Found it! Password: %s" % line)

感谢您的帮助和解释。

【问题讨论】:

    标签: python file hash md5


    【解决方案1】:

    逐行文件迭代器产生整行包括行终止符

    在您的代码中,您将包含行的行终止符。

    line.encode('utf_8').rstrip() 将产生正确的结果。

    rstrip() 如果您的字符串(故意)以空格结尾,则将失败。在这种情况下,只需这样做:

    line.encode('utf_8').rstrip('\r\n')
    

    如果文件在 Unix 上以 text 模式打开,\r(回车)可能会保留(在 Windows 上不是问题)

    (并且rstrip不会删除'\r\n'字符串,但是每个\r或/和n都包含在行尾,它不像str.split

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2014-05-19
      • 1970-01-01
      • 2013-08-20
      • 2020-12-08
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多