我想编写一个可以加密和解密单词的脚本。但是我遇到了一个问题,无法理解。我用来加密的这个代码是:
def encrypt():
print "Enter string for encryption: n"
rec = raw_input()
enkr =hashlib.sha256(rec).hexdigest()
print enkr
和我用来根据字典解密的代码是:
def decrypt():
print "Enter hash for decryption: n"
rec = raw_input()
print "Enter path of wordlist"
list = raw_input()
wordl=open(list,"r")
wordk = wordl.readlines()
for w in wordk:
w = hashlib.sha256(w).hexdigest()
if rec.lower() != w:
print "Not this " + w
elif rec.lower() ==w:
print "Found ! " + w
break
else:
print "Nothing found ! "
例如,假设我想加密单词" admin"。我得到了这个哈希8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BBBB8A81F6F6F6F2AB4448A918当我想解密时,我明白了FC8252C8DC555839967C58B9AD755A59B61B67C13227DDAE4BD3F78A38BF394F7我的问题是,为什么我会得到两个不同的哈希,具有相同的功能?最好的问候,可汗
8c69…a918
是 "admin"
的sha256哈希。
fc82…94f7
是 "adminn"
的sha256哈希。
file.readlines()
在其读取的每行末尾包含一个尾随的新线。要删除它,您可以使用w.rstrip("n")
。
rec = raw_input()
中没有新线。
另一方面,for w in wordk:
迭代的每一行都有一个尾线。
因此,您必须使用rstrip("n")
或使用splitlines()
在执行Hash之前摆脱最后的Newline字符。