2017-10-17 368 views
0

當我使用shell命令:呼應-n 「密碼」 | OpenSSL的DGST -md5 -binary | OpenSSL的ENC -base64

echo -n "password"|openssl dgst -md5 -binary|openssl enc -base64 

結果是:X03MO1qnZdYdgyfeuILPmQ ==

但是,我怎麼能做python3

import base64, sys, hashlib 
text = "password" 
try: 
    text = bytes(text, 'utf-8') 
except: 
    pass 
auth = str.encode(hashlib.md5(text).hexdigest()) 
query = base64.b64encode(auth) 
print(query) 

的結果是不同的:NWY0ZGNjM2I1YWE3NjVkNjFkODMyN2RlYjg4MmNmOTk =

+0

當保存密碼驗證程序只是使用哈希函數是不夠的,僅僅加入鹽並稍微提高了安全性。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。更好的是使用諸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash'或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過暴力破解密碼。 – zaph

回答

0

您請求ŧ當將'-binary'選項傳遞給openssl時,他以二進制格式消化輸出。所以你必須在python中處理二進制數據。只需使用digest()方法而不是hexdigest()

import base64, sys, hashlib 
text = "password" 
try: 
    text = bytes(text, 'utf-8') 
except: 
    pass 
auth = hashlib.md5(text).digest() 
query = base64.b64encode(auth) 
print(query.decode()) 
+0

它運作良好。非常感謝你。 – joyesong