Python hashlib模塊用法實例分析
本文實例講述了Python hashlib模塊用法。分享給大家供大家參考,具體如下:
一、hashlib基本使用
python中的hashlib模塊用來進行hash或者md5加密,而且這種加密是不可逆的,所以這種算法又被稱為摘要算法。其支持Openssl庫提供的所有算法,包括md5、sha1、sha224、sha256、sha512等。
常用的屬性和方法:
algorithms:列出所有加密算法('md5','sha1','sha224','sha256','sha384','sha512')
digesti_size:產(chǎn)生的散列的字節(jié)大小
md5()/sha1():創(chuàng)建一個md5或者sha1加密模式的hash對象
update(arg):用字符串參數(shù)來更新hash對象,如果同一個has對象重復(fù)調(diào)用該方法,如下:m.update(a); m.update(b),則等于m.update(a+b)
digest():返回摘要,作為二進制數(shù)據(jù)字符串值
hexdigest():返回摘要,作為十六進制數(shù)據(jù)字符串值
copy():復(fù)制
下面是一個簡單的加密示例:
import hashlib m = hashlib.md5() m.update('how to use md5'.encode('utf-8')) m.update('in python hashlib'.encode('utf-8')) print m.hexdigest()
返回值如下:
9f97604918a2e86bfcc4aea5c35a4c8b
下面一個示例用于計算文件md5值:
#!/usr/bin/env python #coding: utf-8 import hashlib import sys def main(): if len(sys.argv) != 2: sys.exit('Usage: %s file' % sys.argv[0]) filename = sys.argv[1] m = hashlib.md5() with open(filename, 'rb') as fp: while True: blk = fp.read(4096) # 每次讀取4kb if not blk: break m.update(blk) print m.hexdigest(), filename if __name__ == '__main__': main()
二、hashlib的應(yīng)用場景
摘要算法通常應(yīng)用于網(wǎng)站存儲用戶的帳號密碼相關(guān)信息。默認情況下,我們插入到數(shù)據(jù)庫的帳號密碼都是以明文保存。這樣的話,一旦數(shù)據(jù)庫泄露,所有用戶的口令都會直接泄露,而且明文保存,網(wǎng)站管理員也可以直接查看到用戶口令,這樣及不安全。所以我們可以在獲取到用戶輸入的密碼以后,直接對其進行加密處理。然后將加密的字符串存入數(shù)據(jù)庫。這樣當下次用戶登錄時,再對用戶輸入的密碼進行加密處理,然后與數(shù)據(jù)庫中存儲的加密字串進行比對,如果匹配,則說明密碼正確。
當然上述方法比明文存儲密碼確實要安全不少。但在有些場景中,用戶通常會將密碼設(shè)置的尤為簡單。這樣如果數(shù)據(jù)庫泄露,黑客可以通過簡單的密碼嘗試來完成對加密字串的匹配。為了解決這種方法,我們通常需要對密碼做“加鹽”處理。如下:
def get_md5(password): m = hashlib.md5() m.update(password) return m.hexdigest() def calc_md5(password): return get_md5(password + 'the-Salt') db = {} def register(username,password): db[username] = username db[password] = calc_md5(password)
這樣,只要'the-Salt'部分不被泄露,就沒辦法反推用戶的簡單密碼。
但是這樣仍然有個問題,那就是多個用戶的密碼可能重復(fù),這樣,在數(shù)據(jù)庫里就會出現(xiàn)相同的加密字串。我們知道通常而言,用戶的用戶名肯定不會相同。我們再假設(shè)用戶的用戶名不會改變。我們可以使用用戶的用戶名來做加鹽處理,如下:
def clc_md5(username,password): return get_md5(passwd + username + 'the-Salt')
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python文件與目錄操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Python偏函數(shù)Partial function使用方法實例詳解
這篇文章主要介紹了Python偏函數(shù)Partial function使用方法實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2020-06-06python實現(xiàn)錄制全屏和選擇區(qū)域錄屏功能
這篇文章主要介紹了python實現(xiàn)錄制全屏和選擇區(qū)域錄屏功能,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02詳解python和matlab的優(yōu)勢與區(qū)別
在本文中小編給大家分享的是關(guān)于python和matlab的優(yōu)勢與區(qū)別的知識點以及實例代碼,需要的朋友們參考學(xué)習下。2019-06-06Python編程使用Selenium模擬淘寶登錄實現(xiàn)過程
這篇文章主要介紹了Python編程使用Selenium模擬淘寶登錄的實現(xiàn)過程示例及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2021-10-10windows下Anaconda的安裝與配置正解(Anaconda入門教程)
最近很多朋友學(xué)習python,很多朋友也推薦使用anaconda這個工具,但安裝以后也不會使用,這里腳本之家小編就為大家整理一下比較詳細的教程,方便自己也方便需要的朋友,希望大家以后多多支持腳本之家2018-04-04PyTorch一小時掌握之神經(jīng)網(wǎng)絡(luò)分類篇
這篇文章主要介紹了PyTorch一小時掌握之神經(jīng)網(wǎng)絡(luò)分類篇,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09