SHA256加密和解密(Python 2.7) - 相同的单词,但不同的哈希

时间:2017-02-17 22:33:56

标签: python encryption hash sha256 sha

我想编写一个可以加密和解密单词的脚本。但是我遇到了一个问题却无法理解。我用来加密的代码就是:

 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”。我得到这个哈希8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 当我想解密时,我得到这个 fc8252c8dc55839967c58b9ad755a59b61b67c13227ddae4bd3f78a38bf394f7 而我的问题是,为什么我得到两个具有相同功能的不同哈希?最好的问候,汗

2 个答案:

答案 0 :(得分:3)

8c69…a918"admin"的SHA256哈希。

fc82…94f7"admin\n"的SHA256哈希。

file.readlines()在其读取的每一行的末尾包含一个尾随换行符。要删除它,您可以使用w.rstrip("\n")

答案 1 :(得分:1)

rec = raw_input()中没有换行符。

另一方面,for w in wordk:迭代的每一行都有一个尾随换行符。

所以你必须rstrip("\n")你的行,或者在执行哈希之前使用splitlines()删除最后一个换行符。