Python中Pickle模塊和base64模塊的使用解析
1.pickle模塊
pickle模塊是python的標(biāo)準(zhǔn)模塊,提供了對(duì)于python數(shù)據(jù)的序列化操作,可以將數(shù)據(jù)轉(zhuǎn)換為bytes類型,其序列化速度比json模塊要高。
- pickle.dumps()將python數(shù)據(jù)序列化為bytes類型
- pickle.loads()將bytes類型數(shù)據(jù)反序列化為python的數(shù)據(jù)類型
import pickle
d = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
s = pickle.dumps(d)
print(s)
# b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'
print(pickle.loads(s))
# {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}2.base64模塊
Base64是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的表示方法。由于2^6=64,所以每6個(gè)比特為一個(gè)單元,對(duì)應(yīng)某個(gè)可打印字符。3個(gè)字節(jié)有24個(gè)比特,對(duì)應(yīng)于4個(gè)Base64單元,即3個(gè)字節(jié)可由4個(gè)可打印字符來表示。在Base64中的可打印字符包括字母A-Z、a-z、數(shù)字0-9,這樣共有62個(gè)字符,此外兩個(gè)可打印符號(hào)在不同的系統(tǒng)中而不同。
Base64常用于在通常處理文本數(shù)據(jù)的場(chǎng)合,表示、傳輸、存儲(chǔ)一些二進(jìn)制數(shù)據(jù),包括MIME的電子郵件及XML的一些復(fù)雜數(shù)據(jù)。
1.標(biāo)準(zhǔn)base64只有64個(gè)字符(英文大小寫、數(shù)字和+、/)以及用作后綴等號(hào);
2.base64是把3個(gè)字節(jié)變成4個(gè)可打印字符,所以base64編碼后的字符串一定能被4整除(不算用作后綴的等號(hào));
3.等號(hào)一定用作后綴,且數(shù)目一定是0個(gè)、1個(gè)或2個(gè)。這是因?yàn)槿绻拈L(zhǎng)度不能被3整除,base64要在后面添加\0湊齊3n位。為了正確還原,添加了幾個(gè)\0就加上幾個(gè)等號(hào)。顯然添加等號(hào)的數(shù)目只能是0、1或2;
4.嚴(yán)格來說base64不能算是一種加密,只能說是編碼轉(zhuǎn)換。使用base64的初衷。是為了方便把含有不可見字符串的信息用可見字符串表示出來,以便復(fù)制粘貼;
python標(biāo)準(zhǔn)庫中提供了base64模塊,用來進(jìn)行轉(zhuǎn)換
- base64.b64encode()將bytes類型數(shù)據(jù)進(jìn)行base64編碼,返回編碼后的bytes類型
- base64.b64decode()將base64編碼的bytes類型進(jìn)行解碼,返回解碼后的bytes類型
import base64
import pickle
d = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
s = pickle.dumps(d)
print(s)
# b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'
b = base64.b64encode(s) # bytes類型數(shù)據(jù)進(jìn)行base64編碼,返回編碼后的bytes類型
print(b)
# b'gAN9cQAoWAEAAAAxcQF9cQIoWAUAAABjb3VudHEDSwpYCAAAAHNlbGVjdGVkcQSIdVgBAAAAMnEFfXEGKGgDSxRoBIl1dS4='
print(base64.b64decode(b)) # base64編碼的bytes類型進(jìn)行解碼,返回解碼后的bytes類型
# b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'Base64是一種通過查表的編碼方法,不能用于加密,即使使用自定義的編碼表也不行。
Base64適用于小段內(nèi)容的編碼,比如數(shù)字證書簽名、Cookie的內(nèi)容等。
一句話講:Base64是一種任意二進(jìn)制到文本字符串的編碼方法,常用于在URL、Cookie、網(wǎng)頁中傳輸少量二進(jìn)制數(shù)據(jù)。
3.應(yīng)用場(chǎng)景
存一些非敏感數(shù)據(jù)到cookie里面。例如: 網(wǎng)站未登錄用戶選購商品到購物車,可以將選的商品保存到cookie,用戶登陸以后從cookie取出數(shù)據(jù)進(jìn)行合并。步驟如下:
商品的數(shù)據(jù)字典存到cookie字符串,假設(shè)goods_dict是選購的商品數(shù)據(jù)
cookie_str = base64.b64.encode(pickle.dumps(goods_dict)).decode()
從cookie的字符串取出用戶選購的商品數(shù)據(jù)字典。
goods_dict = pickle.loads(base64.b64decode(cookie_str.encode()))
到此這篇關(guān)于Python中Pickle模塊和base64模塊的使用解析的文章就介紹到這了,更多相關(guān)Pickle模塊和base64模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中pandas dataframe刪除一行或一列:drop函數(shù)詳解
今天小編就為大家分享一篇Python中pandas dataframe刪除一行或一列:drop函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
在linux系統(tǒng)中安裝python3.8.1?并卸載?python3.6.2?更新python3引導(dǎo)到3.8.1的
這篇文章主要介紹了如何在linux系統(tǒng)中安裝python3.8.1?并卸載?python3.6.2?更新python3引導(dǎo)到3.8.1,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11
python 普通克里金(Kriging)法的實(shí)現(xiàn)
這篇文章主要介紹了python 普通克里金(Kriging)法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Python中內(nèi)置函數(shù)filter函數(shù)用法詳解
filter()函數(shù)是Python內(nèi)置的另一個(gè)有用的高階函數(shù),filter()函數(shù)接收一個(gè)函數(shù)f和一個(gè)序列,函數(shù)f的作用是對(duì)每個(gè)元素進(jìn)行判斷,返回True或False,下面這篇文章主要給大家介紹了關(guān)于Python中內(nèi)置函數(shù)filter函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2024-05-05
Python+tkinter使用40行代碼實(shí)現(xiàn)計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了Python+tkinter使用40行代碼實(shí)現(xiàn)計(jì)算器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
一文詳解如何使用Python SDK在Collection中進(jìn)行相似性檢索
這篇文章主要為大家詳細(xì)介紹了如何通過Python SDK在Collection中按分組進(jìn)行相似性檢索,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-10-10
Django Rest framework權(quán)限的詳細(xì)用法
這篇文章主要介紹了Django Rest framework權(quán)限的詳細(xì)用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

