1. 程式人生 > >hashlib模組用法

hashlib模組用法

hashlib模組是Python內建的一個摘要模組,這個模組中有多種演算法,例如md5,sha1等,但是這些演算法的作用相同,就是用於將一個字串通過計算得到一串密文.

這些演算法有以下特點:

  1. 加密的過程不可逆,不能通過加密後的密文解密得到原字串.
  2. 對於同一字串,使用同一演算法計算得到的密文結果永遠一致.
  3. 對於不同的字串(即使是隻多了一個空格),計算的結果永遠不同.

由於以上這些特點,hashlib模組可以用於密碼加密,檔案一致性校對等用途.

1.密碼加密

簡單的密碼可以通過撞庫(也稱暴力破解),就是將md5計算後的結果記錄下來,然後通過比對加密後的結果來判斷密碼來進行破解;這種破解可以通過對原密碼加上一些別的內容在進行摘要來進行預防,這種方法叫做加鹽.

import hashlib
def password_md5(password):
    pwd_md5 = hashlib.md5('123'.encode('utf-8'))
    pwd_md5.update(password.encode('utf-8'))
    return pwd_md5.hexdigest()
print(password_md5('123456'))

這樣,通過password_md5函式就可以得到一個密碼加過鹽的摘要結果,比不加鹽安全了許多,但還是不夠安全.

動態加鹽:

import hashlib
def new_password_md5(username,password):
    pwd_md5 = hashlib.md5(username.encode('utf-8'))
    pwd_md5.update(password.encode('utf-8'))
    return pwd_md5.hexdigest()
print(new_password_md5('ergou','123456'))

這樣,通過new_password_md5函式,就可以獲得一個密碼以使用者名稱作為鹽的摘要結果,相對來說這種方式就安全了許多,暴力破解的難度也上升了很多.

2.檔案一致性的校對

由於hashlib中演算法不同字串通過計算得到的結果一定不同的特點,使得可以通過演算法來驗證檔案的一致性.

import hashlib
import os
def get_md5(file):
    file_size = os.path.getsize(file)
    file_md5 = hashlib.md5()
    with open(file,mode='rb') as f:
        while file_size != 0:
            content = f.read(2048)
            file_md5.update(content)
            file_size -= len(content)
    return file_md5.hexdigest()

def issame(file_1,file_2):
    if get_md5(file_1) == get_md5(file_2):
        return True
    else:
        return False

通過issame函式,如果兩檔案一致,則返回True,否則返回False.