python中base64加密解密方法實(shí)例分析
本文實(shí)例講述了python中base64加密解密方法。分享給大家供大家參考。具體分析如下:
一、base64
Base64是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法。由于2的6次方等于64,所以每6個(gè)比特為一個(gè)單元,對(duì)應(yīng)某個(gè)可打印字符。三個(gè)字節(jié)有24個(gè)比特,對(duì)應(yīng)于4個(gè)Base64單元,即3個(gè)字節(jié)需要用4個(gè)可打印字符來(lái)表示。它可用來(lái)作為電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數(shù)字0-9 ,這樣共有62個(gè)字符,此外兩個(gè)可打印符號(hào)在不同的系統(tǒng)中而不同。編碼后的數(shù)據(jù)比原始數(shù)據(jù)略長(zhǎng),為原來(lái)的4/3。
Base64常用于在通常處理文本數(shù)據(jù)的場(chǎng)合,表示、傳輸、存儲(chǔ)一些二進(jìn)制數(shù)據(jù)(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存儲(chǔ)復(fù)雜數(shù)據(jù).
在郵件中的用途:
在MIME格式的電子郵件中,base64可以用來(lái)將binary的字節(jié)序列數(shù)據(jù)編碼成ASCII字符序列構(gòu)成的文本。使用時(shí),在傳輸編碼方式中指定base64。使用的字符包括大小寫(xiě)字母各26個(gè),加上10個(gè)數(shù)字,和加號(hào)“+”,斜杠“/”,一共64個(gè)字符,等號(hào)“=”用來(lái)作為后綴用途。
在URL中的用途:
標(biāo)準(zhǔn)的Base64并不適合直接放在URL里傳輸,因?yàn)閁RL編碼器會(huì)把標(biāo)準(zhǔn)Base64中的“/”和“+”字符變?yōu)樾稳纭?XX”的形式,而這些“%”號(hào)在存入數(shù)據(jù)庫(kù)時(shí)還需要再進(jìn)行轉(zhuǎn)換,因?yàn)锳NSI SQL中已將“%”號(hào)用作通配符。
為解決此問(wèn)題,可采用一種用于URL的改進(jìn)Base64編碼,它不在末尾填充'='號(hào),并將標(biāo)準(zhǔn)Base64中的“+”和“/”分別改成了“*”和“-”,這樣就免去了在URL編解碼和數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)所要作的轉(zhuǎn)換,避免了編碼信息長(zhǎng)度在此過(guò)程中的增加,并統(tǒng)一了數(shù)據(jù)庫(kù)、表單等處對(duì)象標(biāo)識(shí)符的格式。
另有一種用于正則表達(dá)式的改進(jìn)Base64變種,它將“+”和“/”改成了“!”和“-”,因?yàn)椤?”,“*”在正則表達(dá)式中都可能具有特殊含義。
二、python中使用
C:\Python27>python Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import base64 >>> str = 'haha' >>> base64.b64encode(str) 'aGFoYQ==' >>> base64.b64decode('aGFoYQ==') 'haha'
三、其他的方法,這個(gè)比較重要
base64.b64encode(s[, altchars])
base64.b64decode(s[, altchars])
altchars為可選的參數(shù),用來(lái)替換+和/的一個(gè)兩個(gè)長(zhǎng)度的字符串。
base64.urlsafe_b64encode(s)
base64.urlsafe_b64decode(s)
此方法中用-代替了+,用_代替了/ ,這樣可以保證編碼后的字符串放在url里可以正常訪(fǎng)問(wèn)
base64.b32encode(s)
base64.b32decode(s[, casefold[, map01]])
base64.b16encode(s)
base64.b16decode(s[, casefold])
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python?中?Selenium?的?send_keys()?函數(shù)用法小結(jié)
send_keys() 是將數(shù)字、文本和符號(hào)等鍵盤(pán)輸入發(fā)送到應(yīng)用程序的文本框的過(guò)程, send_keys() 是 WebDriver 的一部分,每個(gè)鍵盤(pán)輸入都會(huì)發(fā)送到此元素,這篇文章主要介紹了Python?中?Selenium?的?send_keys()?函數(shù),需要的朋友可以參考下2023-11-11Python 時(shí)間處理datetime實(shí)例
Python Cook書(shū)中有很多章節(jié)都是針對(duì)某個(gè)庫(kù)的使用進(jìn)行介紹或是通過(guò)組合多個(gè)函數(shù)實(shí)現(xiàn)一些復(fù)雜的功能。我這里直接跳過(guò)了上一章節(jié)中對(duì)于文件處理的一些章節(jié),直接進(jìn)入對(duì)時(shí)間操作的章節(jié)。2008-09-09Pycharm運(yùn)行程序時(shí),控制臺(tái)輸出PyDev?console:starting問(wèn)題
Pycharm運(yùn)行程序時(shí),控制臺(tái)輸出PyDev?console:starting問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Python實(shí)現(xiàn)8個(gè)概率分布公式的方法詳解
在本文中,我們將介紹一些常見(jiàn)的分布(均勻分布、高斯分布、對(duì)數(shù)正態(tài)分布等)并通過(guò)Python代碼進(jìn)行可視化以直觀(guān)地顯示它們,感興趣的可以學(xué)習(xí)一下2022-05-05在jupyter notebook中使用pytorch的方法
這篇文章主要介紹了在jupyter notebook中使用pytorch的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法
今天小編就為大家分享一篇python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07PYQT5 vscode聯(lián)合操作qtdesigner的方法
這篇文章主要介紹了PYQT5 vscode聯(lián)合操作qtdesigner的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03python3通過(guò)subprocess模塊調(diào)用腳本并和腳本交互的操作
這篇文章主要介紹了python3通過(guò)subprocess模塊調(diào)用腳本并和腳本交互的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12