python hashlib模組演算法

來源:互聯網
上載者:User

標籤:bsp   break   校正   速度   分塊   長度   產生   bae   hashlib   

hashlib模組

python中的hashlib為我們提供了常見的摘要演算法,如MD5、sha1

那麼現在問題來了,摘要演算法what?

摘要演算法又稱雜湊演算法、散列演算法。

它指的是把任意長度的資料data,通過函數f(),轉換為一個長度固定的摘要digest(通常用16進位的字串表示),

目的是為了發現原始的資料是否被人篡改過。

摘要演算法之所以可以辨別資料是否被人篡改過,就是因為摘要函數是一個單向函數,

想要計算f(data)很容易,但是通過digest反推data卻非常困難。

並且,只要是對未經處理資料做哪怕一點點改動,都會導致計算出的摘要截然不同。

接下來我們以常見的摘要演算法MD5為例,

 

#計算出一個字串的MD5值import hashlibmd5 = hashlib.md5()md5.update(b‘hello,python‘)  #ps:需要轉換成b位元組或者encode(‘utf-8‘)print(md5.hexdigest())

 

輸出結果:

15ac32041ff74c93c1842b152df7519e

 

import hashlibmd5 = hashlib.md5()md5.update(‘hello,python‘.encode(‘utf-8‘))print(md5.hexdigest())

輸出結果:

15ac32041ff74c93c1842b152df7519e

 

如果資料量很大,可以分塊多次調用update(),

一段字串分成幾段摘要和直接進行摘要的結果是相同的

import hashlibmd5 = hashlib.md5()md5.update(b‘hello,‘)        #原字串中有逗號的不要忘記了md5.update(b‘python‘)print(md5.hexdigest())

輸出結果:

15ac32041ff74c93c1842b152df7519e

 

模仿檔案校正

import hashlibdef check_md5(filename):    md5 = hashlib.md5()    with open(filename,‘rb‘) as f:        while True:            content = f.read(2048)    #分段讀取,以免佔用大段記憶體            if content:                md5.update(content)            else:                break    return md5.hexdigest()
file1 = check_md5(‘md5_test1‘)  #我建立的md5_test1中的資料為11112
file2 = check_md5(‘md5_test2‘)   #我建立的md5_test2中的資料為11111
print(file1)
print(file2)

輸出結果:

afcb7a2f1c158286b48062cd885a9866
b0baee9d279d34fa1dfd71aadb908c3f

 

md5摘要加密傳輸進來的密碼,並動態加鹽提高安全性

import hashlibdef md5_digest(salt,pwd):    md5 = hashlib.md5(salt.encode(‘utf-8‘))  #salt,加鹽操作,增加安全性,而且還可以對鹽進行切片進一步增加安全性如salt[::-1]    md5.update(pwd.encode(‘utf-8‘))    return md5.hexdigest()salt = ‘鹽‘pwd = ‘123450‘print(md5_digest(salt,pwd))

輸出結果:

684d41d1f7512e40a8939fd4fed9518a

 

經過Salt處理的MD5口令,只要Salt不被駭客知道,即使使用者輸入簡單口令,也很難通過MD5反推明文口令。

但是如果有兩個使用者都使用了相同的簡單口令比如123456,在資料庫中,將儲存兩條相同的MD5值,這說明這兩個使用者的口令是一樣的。有沒有辦法讓使用相同口令的使用者儲存不同的MD5呢?

如果假定使用者無法修改登入名稱,就可以通過把登入名稱作為Salt的一部分來計算MD5,從而實現相同口令的使用者也儲存不同的MD5。

摘要演算法在很多地方都有廣泛的應用。要注意摘要演算法不是密碼編譯演算法,不能用於加密(因為無法通過摘要反推明文),只能用於防篡改,但是它的單向計算特性決定了可以在不儲存明文口令的情況下驗證使用者口令。

 

MD5是最常見的摘要演算法,速度很快,產生結果是固定的128 bit位元組,通常用一個32位的16進位字串表示。
另一種常見的摘要演算法是SHA1,調用SHA1和調用MD5完全一樣,就是將前面的md5改成sha1而己。
SHA1的結果是160 bit位元組,通常用一個40位的16進位字串表示。
比SHA1更安全的演算法是SHA256和SHA512,不過越安全的演算法越慢,而且摘要長度更長。

 

python hashlib模組演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.