【问题标题】:Python - issue comparing two hashesPython - 比较两个哈希的问题
【发布时间】:2013-09-23 22:38:49
【问题描述】:

新手在这里玩散列,但没有得到我想要的结果。尝试从网络上的 txt 文件中获取哈希,然后将该哈希与本地哈希进行比较。

出于测试目的,我使用的是 SHA256.new(“10”).hexdigest(),即:4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5

代码:

import urllib2
from Crypto.Hash import SHA256

source = urllib2.urlopen("<xxURLxx>")
line1 = source.readline()  # get first line of the txt file in source which is the hash

localHash = SHA256.new("10").hexdigest()

if localHash == line1: #  I know, shouldnt use == to compare hashes but it is my first try.
   print("it works!")
else:
   print("it does not work...")

打印我从 Web 文件获得的哈希值和本地哈希值,它们返回相同的字符。但是,如果我再对每个哈希值进行一次哈希处理,我会得到不同的结果。

有什么想法吗?

环顾 S.O.并发现: Compare result from hexdigest() to a string 但问题是缺少我所拥有的 .digest()。

提前感谢您的帮助。

【问题讨论】:

  • 我猜line1 末尾有一个换行符,但没有line1 的实际值,无法确定。
  • 什么是“对每个哈希再进行一次哈希”?如果你 SHA256 是一个 SHA256,你不应该期望它自己返回……如果你的意思是不同的……那你是什么意思?如果您向我们展示演示问题的代码、输入、预期输出和实际输出,则无需将问题描述得那么严格。
  • 另外,谁告诉你不应该使用== 来比较哈希?它们是十六进制字符串;否则你会如何比较它们?
  • 原来我正在阅读一些 old python cmets 而没有意识到。是关于 == 不安全的一段文字...此刻我有点过头了。
  • @abarnert:定时攻击

标签: python hash urllib2 sha256


【解决方案1】:

如果我不得不猜测,我会说改变

line1 = source.readline()

line1 = source.readline().strip()

将解决问题。 strip() 删除前导和尾随空格,包括换行符 ('\n'),它几乎肯定会位于 readline 读取的第一行末尾。

您可以通过使用repr 来查看是否存在类似的“不可见”字符,这会使用转义字符显式呈现它们:

>>> print repr('\t')
'\t'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多