2017-02-17 1539 views
0

我想写一个脚本,可以加密和解密单词。但是我遇到了一个问题,无法理解它。我用来加密该代码是这样的:SHA256加密和解密(Python 2.7) - 相同的词,但不同的散列

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 ! " 

例如比方说,我想加密“管理”一词。我得到这个哈希8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 ,当我想解密我得到这个 fc8252c8dc55839967c58b9ad755a59b61b67c13227ddae4bd3f78a38bf394f7 和我的问题是,为什么会出现两次与相同功能的不同的哈希?最好的问候,汗

+0

基于反引号的语法用于代码格式化长度小于一行的字符串。对于多行块,在选择代码将每行缩进四个空格后,使用编辑器中的“{}”按钮,或者自己添加这些空格。 –

+2

不要描述你在做'加密'和'解密',因为它是错误的和令人困惑的。并且确保在从'readlines'出来的字符串的末尾去掉换行符,readline包含它们,raw_input不是 – pvg

+0

SHA 256不加密。 – user2357112

回答

3

8c69…a918"admin" SHA256哈希。

fc82…94f7"admin\n"的SHA256散列。

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

+0

谢谢,现在一切都清楚了! – Djehenghizz

1

rec = raw_input()没有换行符。

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

所以你必须rstrip("\n")你的线或使用splitlines()摆脱最后一个换行符在执行散列之前。

+0

谢谢,我现在明白了。 – Djehenghizz