Python?base64和hashlib模塊及用法詳解
一、base64模塊
base64模塊提供了在二進制數(shù)據(jù)和可打印ASCII字符間編解碼的功能,包括 RFC3548中定義的Base16, Base32, Base64, Ascii85, Base85等編碼。
base64模塊屬于標(biāo)準(zhǔn)庫,無需進行安裝,導(dǎo)入即可使用。
base64模塊支持兩種接口:
- bytes類型數(shù)據(jù)進行base64編碼。即將類字節(jié)對象編碼為由ASCII可打印字符表示的bytes。
- base64編碼的bytes類型進行解碼。即將類字節(jié)對象或純ASCII字符組成的Unicode字符串解碼為bytes。
注意:編碼與解碼的處理對象是byte,及參數(shù)必須是二進制數(shù)據(jù),才可以進行正常使用。
1、對字符串編解碼
import base64
str = "Hello Python"
# 默認(rèn)以utf-8編碼
byte_str = str.encode("utf-8")
b64_str = base64.b64encode(byte_str)
print(b64_str)
print("-------------")
# 默認(rèn)以utf-8解碼
byte_str2 = base64.b64decode(b64_str)
str2 = byte_str2.decode("utf-8")
print(str2)
2、對URL編解碼
import base64
url = "http://www.baidu.com?k1=v1&k2=值二"
# 默認(rèn)以utf-8編碼
byte_url = url.encode("utf-8")
b64_url = base64.b64encode(byte_url)
print(b64_url) # b'aHR0cDovL3d3dy5iYWlkdS5jb20/azE9djEmazI95YC85LqM'
print("-------------")
# 默認(rèn)以utf-8解碼
byte_url2 = base64.b64decode(b64_url)
url2 = byte_url2.decode("utf-8")
print(url) # http://www.baidu.com?k1=v1&k2=值二二、hashlib模塊
1、hashlib模塊
hashlib是Python的內(nèi)置模塊,提供了多種安全方便的常見摘要算法,其中主要包括MD5,SHA1,SHA256,SHA384,SHA512等。這些摘要方法在使用上通用,返回帶有同樣接口的hash對象,對算法的選擇,差別只在于構(gòu)造方法的選擇。
摘要算法又稱哈希算法、散列算法。它通過一個函數(shù)算法,把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串)。
1.1 常用屬性
import hashlib #列出hashlib內(nèi)容 print(dir(hashlib)) #列出所有加密算法 print(hashlib.algorithms_available) print(hashlib.algorithms_guaranteed) #產(chǎn)生的散列字節(jié)大小。 h.digest_size #哈希內(nèi)部塊的大小 h.block_size
1.2 常用方法
# 創(chuàng)建指定加密模式的hash對象 hash.new([arg]) # 更新哈希對象以字符串參數(shù)。 # 如果同一個hash對象重復(fù)調(diào)用該方法,m.update(a); m.update(b) 等價于 m.update(a+b) hash.update(arg) # 返回摘要,作為二進制數(shù)據(jù)字符串值。 hash.digest() # 返回摘要,作為十六進制數(shù)據(jù)字符串值 hash.hexdigest() # 復(fù)制 hash.copy()
1.3 使用步驟
方式一:
import hashlib
# -------以 MD5為例-------
# 1. 創(chuàng)建hash工廠
m = hashlib.md5()
# 2. 在內(nèi)存里面加載二進制數(shù)據(jù)
# m.update('Hello'.encode('utf-8'))
# m.update('Python'.encode('utf-8'))
## 等價于,如果二進制數(shù)據(jù)很長的話,可以分開更新
m.update('Hello Python'.encode('utf-8'))
print(m.digest_size) # 16
print(m.block_size) # 64
# 3、返回十六進制str摘要值
hash_value = m.hexdigest()
print(hash_value) # a709c173220d6185d12248faa9f40ac8
# 3.返回bytes格式的消息摘要
print(m.digest()) # b'\xa7\t\xc1s"\ra\x85\xd1"H\xfa\xa9\xf4\n\xc8'方式二:
import hashlib
'''
一個通用的構(gòu)造方法,
name:是某個算法的字符串名稱,
data:是可選的bytes類型待摘要的數(shù)據(jù)。
'''
m = hashlib.new('md5', b'Hello Python')
print(m.hexdigest())
print(m.digest())
print("-----復(fù)制方法測試-----")
# 復(fù)制
m2 = m.copy()
print(m2)
print(m2.hexdigest())
print(m2.digest())
2、MD5(消息摘要算法)
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函數(shù),可以產(chǎn)生出一個128位的散列值(hash value),用于確保信息傳輸完整一致。
示例代碼如下:
import hashlib
def jm_md5(password):
# 構(gòu)建MD5對象
m = hashlib.md5()
# 自定義加鹽值
m.update('abc'.encode(encoding='utf-8'))
m.update(password.encode(encoding='utf-8'))
# 返回十六進制str摘要值
password_md5 = m.hexdigest()
return password, password_md5
res = jm_md5('123456')
print(res) # ('123456', '0659c7992e268962384eb17fafe88364')3、SHA-256(安全哈希算法)
安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn)(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。驗證數(shù)據(jù)的完整性。
科學(xué)家們推出了SHA1,SHA224,SHA256,SHA384,SHA512,當(dāng)然位數(shù)越長,破解難度越大,但同時生成加密的消息摘要所耗時間也更長。常用的還是SHA-256。
示例代碼如下:
import hashlib
def jm_sha256(password):
# 構(gòu)建MD5對象
m = hashlib.sha256()
# m = hashlib.sha512()
# 自定義加鹽值
m.update('abc'.encode(encoding='utf-8'))
m.update(password.encode(encoding='utf-8'))
# 返回十六進制str摘要值
password_md5 = m.hexdigest()
return password, password_md5
res = jm_sha256('123456')
print(res)
# ('123456', 'a03c32fcd351cba2d9738622b083bed022ef07793bd92b59faea0207653f371d')– 求知若饑,虛心若愚。
到此這篇關(guān)于Python base64和hashlib模塊的文章就介紹到這了,更多相關(guān)Python base64和hashlib模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyInstaller將Python腳本打包為.exe可執(zhí)行文件的步驟詳解
Python是一門強大而靈活的編程語言,為了方便共享和部署,我們可以將 Python 腳本打包為可執(zhí)行文件(.exe),這樣其他用戶就無需安裝 Python環(huán)境,直接運行可執(zhí)行文件即可,本文將介紹如何使用PyInstaller 工具實現(xiàn)這一目標(biāo),需要的朋友可以參考下2023-12-12
對pandas進行數(shù)據(jù)預(yù)處理的實例講解
下面小編就為大家分享一篇對pandas進行數(shù)據(jù)預(yù)處理的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Matplotlib子圖的創(chuàng)建的實現(xiàn)
本文主要介紹了Matplotlib子圖的創(chuàng)建的實現(xiàn),包括fig.add_axes()創(chuàng)建子圖和plt.axes創(chuàng)建子圖這兩種方法,具有一定的參考價值,感興趣的可以了解一下2023-11-11
python中使用urllib2獲取http請求狀態(tài)碼的代碼例子
這篇文章主要介紹了python中使用urllib2獲取http請求狀態(tài)碼的代碼例子,需要的朋友可以參考下2014-07-07
在Python的Flask中使用WTForms表單框架的基礎(chǔ)教程
WTForms由Python寫成,為表單而生,提供了很多制作Web表單的實用API,和Flask框架結(jié)合使用效果拔群,這里我們就一起看一下在Python的Flask中使用WTForms表單框架的基礎(chǔ)教程2016-06-06

