2013-09-23 111 views
0

新手玩哈希在这里,并没有得到我期待的结果。尝试从Web上的txt文件获取哈希,然后将该哈希与本地哈希进行比较。蟒蛇 - 问题比较两个哈希

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

CODE:

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...") 

打印我从网络文件中获取的哈希和本地散列他们返回相同的字符。但是如果我再次散列每个散列,我会得到不同的结果。

任何想法?

看看S.O.并发现: Compare result from hexdigest() to a string 但问题是缺乏.digest(),我有。

非常感谢您的帮助。

+0

我猜'line1'具有在最后一个换行符,但不'line1'的实际值,这是不可能的。 – Blender

+1

什么是“散列每个哈希多一次”?如果你SHA256是一个SHA256,你不应该期望它自己回归......如果你的意思不同......那么你是什么意思?如果向我们展示代码,输入,预期输出和实际输出以显示问题,则无需严格描述问题。 – abarnert

+2

另外,谁告诉你不应该用'=='比较哈希值?它们是十六进制字符串;你会如何比较它们? – abarnert

回答

1

如果我猜的话,我会说,改变

line1 = source.readline() 

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

您可以查看是否有这样的“隐形”字使用repr,这使得他们明确使用转义字符:

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

这个伎俩!真的非常感谢你。 :) – user2808964