1. 程式人生 > >python中base64模組的加解密函式

python中base64模組的加解密函式

Base64模組簡介

Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位制資料(或不可列印的字串)。包括MIME的email,email via MIME, 在XML中儲存複雜資料。

在郵件中的用途:

在MIME格式的電子郵件中,base64可以用來將binary的位元組序列資料編碼成ASCII字元序列構成的文字。使用時,在傳輸編碼方式中指定base64。使用的字元包括大小寫字母各26個,加上10個數字,和加號“+”,斜槓“/”,一共64個字元,等號“=”用來作為字尾用途。

在URL中的用途:

標準的Base64並不適合直接放在URL裡傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字元變為形如“%XX”的形式, 而這些“%”號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將“%”號用作萬用字元。

為解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標準Base64中的“+”和“/”分別改成了“*”和“-”,這樣就免去了在URL編解碼和資料庫儲存時所要作的轉換,避免了編碼資訊長度在此過程中的增加,並統一了資料庫、表單等處物件識別符號的格式。簡單的說:就是讓字串了可以安全的通過URL傳輸,那句就是把原先base64編碼後的字串中的 + 換成 - , / 換成 _  ,  = 則保留。

另有一種用於正則表示式的改進Base64變種,它將“+”和“/”改成了“!”和“-”,因為“+”,“*”在正則表示式中都可能具有特殊含義。

一.  base64模組中的加解密函式

加解密函式中替換符號字元的功能:

因為base64編碼後的字元除了英文字母和數字外還有三個字元 ‘ + ’,  ‘ / ’,  ’ = ’, 其中  ’ = ’只是為了補全編碼後的字元數為4的整數,而’ + ’和’ / ’在一些情況下需要被替換的,b64encode和b64decode正是提供了這樣的功能。至於什麼情況下’ + ’和’ / ’需要被替換,最常見的就是對url進行base64編碼的時候。urlsafe_b64encode和urlsafe_b64decode 一組,這個就是用來專門對url進行base64編解碼的,實際上也是呼叫的前一組函式。

  1. b16decode(s, casefold=False) 函式

功能:解碼一個Base16編碼的字串

說明:s是要解碼的字串,casefold(可選)是一個標誌,指定是否輸入小寫字母,考慮到安全,預設值是false。 這個函式會返回解碼後的字串,如果s發生錯誤或者不是字串,那麼返回TypeError。

  1. b16encode(s) 函式

功能:編碼一個Base16編碼的字串

說明:s是要進行編碼的字串,函式返回編碼後的字串。

程式碼:                           結果:

  2.b32decode(s, casefold=False, map01=None) 函式

功能: 解碼一個Base32編碼的字串

說明: 同b16decode(s, casefold=False) , 可選引數’map01’(預設是None),如果它不是None的話,數字0會被對映成字母O,數字1會被對映成字母L或者I

  1. b32encode(s) 函式

功能:一個字串使用Base32編碼

程式碼:                                                          

 

 結果:因為有這句話

會出現如下錯誤:

 

這是因為 這句話中第二個引數是False,不接收小寫字母,會出現錯誤,第二個引數如果是True的話, 接收小寫字母,不會出現錯誤。註釋掉這句話的結果是:(結果正確)

 

  1. b645.decode(s, altchars=None) 函式

功能:解碼一個Base64的字串,有關可選引數altchars請參看

  1. b64encode(s, altchars=None) 函式

功能:編碼一個Base64的字串,有關可選引數altchars請參看

  1. decodestring(s) 函式

功能:解碼一個字串,它要包含一行或多行base64的加密資料返回解碼後的二進位制資料。

  1. encodestring(s) 函式

功能:編碼一個字串,編碼成多行的base-64資料。

程式碼:                                                  

  結果:

 

  1. encode(input, output) 函式

功能:編碼一個input檔案,把結果的二進位制資料讀取到output中,

input和output是檔案,當input讀取到空字串的時候返回。

10.decode(input, output) 函式

功能:解碼一個input檔案,把結果的二進位制資料讀取到output中,

input和output是檔案,當input讀取到空字串的時候返回。

程式碼:

 11.urlsafe_b64decode(s) 函式

功能:解碼一個使用url-safe的base64的字母表的字串,詳情參看base64在URL中的用途

12.urlsafe_b64encode(s) 函式

功能:編碼一個使用url-safe的base64的字母表的字串,詳情參看base64在URL中的用途。

程式碼:                                                                              

 

結果:

 

二.python中的md5和SHA1加密演算法使用

MD5
       MD5是一種不可逆的加密演算法,目前是最牢靠的加密演算法之一,尚沒有能夠逆運算的程式被開發出來,它對應任何字串都可以加密成一段唯一的固定長度的程式碼。

SHA1

      SHA1的全稱是Secure Hash Algorithm(安全雜湊演算法) , SHA-1比MD5多32位密文,所以更安全。

用法例項:

python中的hashlib模組是個專門提供hash演算法的庫,現在裡面包括md5, sha1, sha224, sha256, sha384, sha512,使用非常簡單、方便。用法如下:

 

注:with語句的作用:試圖開啟一個檔案,如果正常把值返回給fp。

三. 使用python進行加密解密AES演算法

在此我們將使用到PyCrypto模組,可以訪問 http://www.pycrypto.org/ 來獲得此模組。該模組包括多種加密演算法,如AES、MD5、SHA等。

程式碼:

 

From: http://www.cnblogs.com/changzhi/archive/2013/01/23/2873377.html