1. 程式人生 > >11-19 hashlib模組

11-19 hashlib模組

Python的hashlib提供了常見的摘要演算法,如MD5,SHA1等等。

什麼是摘要演算法呢?

  摘要演算法又稱雜湊演算法、雜湊演算法。它通過一個函式,把任意長度的資料轉換為一個長度固定的資料串(通常用16進位制的字串表示)。

摘要演算法就是通過摘要函式f()對任意長度的資料data計算出固定長度的摘要digest,目的是為了發現原始資料是否被人篡改過。

摘要演算法之所以能指出資料是否被篡改過,就是因為摘要函式是一個單向函式,計算f(data)很容易,但通過digest反推data卻非常困難。而且,對原始資料做一個bit的修改,都會導致計算出的摘要完全不同。

 

sha 演算法  隨著演算法複製程度成都的增加,摘要的時間和成本空間都會增加

摘要演算法的作用

1、密碼的密文儲存
2、檔案的一致性驗證
在下載的時候,檢查我們下載的檔案和遠端伺服器上的檔案是否一致
兩臺機器上的兩個檔案,你想檢查這兩個檔案是否相等
摘要演算法:包括一堆演算法
import hashlib  #提供摘要演算法的模組
md5 = hashlib.md5()    #使用了md5演算法
md5 = hashlib.sha1()    #使用了sha1演算法
md5.update(b'alex3714') #aee949757a2e698417463d47acac93df
print(md5.hexdigest())

說明:
    不管演算法多麼不同,摘要的功能始終不變
    對於相同的字串,使用同一個演算法進行摘要,得到的值總是不變的
    對於相同的字串,使用不同的演算法進行摘要,得到的值應該不同
    不管使用什麼演算法,hashlib的方式永遠不變

例子:

#使用者登入-----(用\n作為分隔符,容易出錯,因為下面是以line來遍歷的)
import hashlib
usename = input('輸入名字:')
password = input('輸入密碼:')
md5 = hashlib.md5()
#生成加密串,其中 password 是要加密的字串
md5.update(b'password')
#獲取加密串
get_psd = md5.hexdigest()
with open('userinfo','w') as f:
    f.write(usename+'|')
    f.write(get_psd)
f.close()

#使用者登入
import hashlib
usename = input('輸入名字:')
password = input('輸入密碼:')
md5 = hashlib.md5()
#生成加密串,其中 password 是要加密的字串
md5.update(b'password')
#獲取加密串
getnew_psd = md5.hexdigest()
print(getnew_psd)
with open('userinfo') as f:
    for line in f:
        user,psd = line.split('|')
        if usename ==user and getnew_psd == psd:
            print('登入成功!')
        else:
            print('登入失敗!')
            exit()
f.close()