我有这个代码,用于输入用户的输入,散列它并将散列和盐写入文件:
def newhash(input):
salt = uuid.uuid4().hex
saltin = input + salt
hashed_in = (hashlib.sha256(saltin.encode()).hexdigest())
file.write(str(hashed_in) + '\n')
file.write(str(salt) + '\n')
file.close()
然后,我使用此代码对用户的新输入进行加盐和散列(使用相同的盐)并将其与文件中的输入进行比较。
salt = linecache.getline(userin + '.userdat', 2)
saltin = newin + salt
hashed_newin = (hashlib.sha256(saltin.encode()).hexdigest())
realin = linecache.getline('file.dat', 1)
if hashed_newin == realin:
return True
使用相同的盐盐化新输入并使用相同的函数进行散列。所以,据我所知,它应该是相同的,第二段代码应该返回True。但是,它总是出错。有任何想法吗? (我正在使用python 3.4.1)
编辑:再次通过调试器运行代码。事实证明,由于某种原因,新哈希出现了不同。
答案 0 :(得分:0)
linecache.getline
会返回'\n'
个字符。
https://docs.python.org/2/library/linecache.html
此代码应该有效:
salt = linecache.getline(userin + '.userdat', 2).strip()
saltin = newin + salt
hashed_newin = (hashlib.sha256(saltin.encode()).hexdigest())
realin = linecache.getline('file.dat', 1).strip()
if hashed_newin == realin:
return True