Python模塊之hashlib

簡介

hashlib模塊定義了用於訪問不同加密散列算法的API,使用不同的哈希算法。哈希算法又稱摘要算法,散列算法,是通過函數的一系列的加密過程,並且不需要密鑰,將任意長度的數據轉化爲一個長度固定的數據串,通常爲16進制的字符串,該過程是不可逆的,只有輸入相同的明文數據,經過相同的摘要算法才能得到一個相同的數據串。

hashlib包含MD5和SHA的加密算法,具體支持md5,sha1, sha224, sha256, sha384, sha512等算法

安裝

pip install hashlib

#若安裝失敗可嘗試使用鏡像
pip install -i  [鏡像地址] [模塊名稱]

#清華源
https://pypi.tuna.tsinghua.edu.cn/simple
#阿里雲
http://mirrors.aliyun.com/pypi/simple/
#豆瓣
http://pypi.douban.com/simple/

使用

以md5加密舉個栗子

import hashlib

test = hashlib.md5()#創建hashlib的md5對象
test.update('admin'.encode('utf-8'))#將字符串載入md5對象,設置字符集
#通過hexdigest()方法,以16進制形式輸出加密結果
print(test.hexdigest())#32位的md5
print(test.hexdigest()[8:-8])#16位的md5

#運行結果
21232f297a57a5a743894a0e4a801fc3
7a57a5a743894a0e

簡潔點寫

import hashlib
print(hashlib.md5('admin'.encode('utf-8')).hexdigest()[8:-8])
print(hashlib.md5('admin'.encode('utf-8')).hexdigest())

#運行結果
7a57a5a743894a0e
21232f297a57a5a743894a0e4a801fc3

注意:向對象中傳入字符串時必須設置編碼類型。可以使用字符串前b''的方法或使用.encode('utf-8')的方法轉爲bytes類型

衆所周知現在的一些md5也不安全,容易被碰撞破解,md5加密前的字符串只要修改哪怕一個字節得到的md5都是天壤之別,所以加鹽操作能使md5變得更安全些

import hashlib

salt='7777777'#自定義加鹽字符串
md5_str='admin'

salt_md5=hashlib.md5((md5_str+salt).encode('utf-8')).hexdigest()
str_md5=hashlib.md5(md5_str.encode('utf-8')).hexdigest()

print("沒有加鹽:"+str_md5)
print("加鹽之後:"+salt_md5)

#運行結果
沒有加鹽:21232f297a57a5a743894a0e4a801fc3
加鹽之後:aaba25d0552ae1ba0f64baf8e378bda1

很多軟件和程序在下載的時候,都會給一個md5校驗碼,來防止在用戶不知道的情況下軟件遭到修改,可以實現一下這種方法,這裏貼一張圖,我們使用它得到一個md5校驗碼,貼一張亞總 **: )**大家可以下載下來自己做md5校驗
在這裏插入圖片描述

#md5文件校驗
import hashlib
m = hashlib.md5()
with open(r'D:/Picture/guitar/goddess.jpg','rb') as f:
    for line in f:
        m.update(line)
print(m.hexdigest())

#運行結果
0c334b6742d625bc5d31d2a78f0e84d5

這種一次性加密的方法對小文件適合,對大文件如果一次性加載到內存可能導致內存溢出,所以大文件最好還是分次update加密

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章