python的md5和sha1加密


首先介紹一下MD5和SHA1

 

MD5

MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法)。128位長度。目前MD5是一種不可逆算法。

具有很高的安全性。它對應任何字符串都可以加密成一段唯一的固定長度的代碼。

 

SHA1

SHA1的全稱是Secure Hash Algorithm(安全哈希算法) 。SHA1基於MD5,加密后的數據長度更長,

它對長度小於264的輸入,產生長度為160bit的散列值。比MD5多32位。

因此,比MD5更加安全,但SHA1的運算速度就比MD5要慢了。

 

Python 中的用法:

Python 內置的 hashlib 模塊就包括了 md5 和 sha1 算法。而且使用起來也極為方便

 

Example of MD5:

1 import hashlib
2
3 data = 'This a md5 test!'
4 hash_md5 = hashlib.md5(data)
5
6 hash_md5.hexdigest()

會輸出:

1 '0a2c0b988863f08471067903d8737962'

上面這段字符串就是 data 轉換后的MD5值。

 

MD5不僅僅是上面這個例子這樣用來處理字符串,還有更廣泛的用途:

  • 加密網站注冊用戶的密碼。 (但去年的各大網站密碼泄漏事件確實讓人蛋疼……)
  • 網站用戶上傳圖片 / 文件后,計算出MD5值作為文件名。(MD5可以保證唯一性)
  • key-value數據庫中使用MD5值作為key。
  • 比較兩個文件是否相同。(大家在下載一些資源的時候,就會發現網站提供了MD5值,就是用來檢測文件是否被篡改)
  • ……

 

sha1的使用與MD5類似,就像下面這樣,所以不再講解SHA1:

import hashlib

hashlib.sha1('This is a sha1 test!').hexdigest()

 

 

 

處理大文件:

上面說過可以用MD5來檢測兩個文件是否相同,但想想,如果是兩個很大的文件,擔心內存不夠用,這時怎么辦?

這就要使用 update 方法了。代碼如下:

import hashlib

def get_file_md5(f):
m = hashlib.md5()

while True:
data = f.read(10240)
if not data:
break

m.update(data)
return m.hexdigest()


with open(YOUR_FILE, 'r') as f:
file_md5 = get_file_md5(f)

(windows 用戶 要使用 'rb'方式打開文件)

 

大家可以用下面這段代碼驗證一下:

import hashlib

x = hashlib.md5()
x.update('hello, ')
x.update('python')
x.hexdigest()

hashlib.md5('hello, python').hexdigest()

 

這兩次的輸出是一樣的。
SHA1 也是一樣的用法。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM