1. 程式人生 > >Python模組介紹之base64模組、Queue模組

Python模組介紹之base64模組、Queue模組

1、base64模組

base64是一種編碼方式,它使用的碼字對應表中一共有64個碼元,分別是A~Z、a~z、0~9、+ 和 / ,一些base64的變種大多數是在最後的兩個字元/和+上做功夫,將其替換成其他的字元,用來避免某些碰撞(與特定場合的某些規則)。

編碼規則:在二進位制層次上,就是先將3個8bite的二進位制數分割成4個6bite的二進位制數,然後在每個6bite二進位制數的高位新增2個二進位制位,使之成為8bite的二進位制數,然後轉換成相應的字元(由於高2位都是0,因此一共可以表示’2的6次方‘個字元,對應表的64個碼元)。如:

轉換前 10101101,10111010,01110110

轉換後 00101011, 00011011 ,00101001 ,00110110

十進位制 43 27 41 54(然後可以對應著表去尋找對應的字元,便完成了base64編碼。)

那麼,看來,原文必須是3的整數倍,轉換完後必須是4的倍數嘮,回答是的。若不是怎麼辦?新增其他符號到轉換完的字元後面,使之成為4的倍數,規定末尾新增=。如下:(原字串長度除以3後餘數為1和2的兩種情況)

餘數為1:

轉換前剩餘字元:w(01110111

轉換後:00011101(29) 00110000(48)

對應表格換成字元(表格可以網上搜一下):dw==(新增2個‘=’)

餘數為2:

轉換前剩餘字元:w(01110111w(01110111

轉換後:00011101(29) 00110111(55) 00011100(28)

字元:d3c= (新增1個’=‘)

轉換前後,字元的數量關係,想必大家自己會想清楚的,對吧! "3 -> 4"

摘錄:

先以“迅雷下載”為例: 很多下載類網站都提供“迅雷下載”的連結,其地址通常是加密的迅雷專用下載地址。

其實迅雷的“專用地址”也是用Base64加密的,其加密過程如下: 一、在地址的前後分別新增AA和ZZ 二、對新的字串進行Base64編碼 另: Flashget的與迅雷類似,只不過在第一步時加的“料”不同罷了,Flashget在地址前後加的“料”是[FLASHGET] 而QQ旋風的乾脆不加料,直接就對地址進行Base64編碼了 然後,回到我們的Python中來,Python的base64模組,給我們提供了8個方法如下:
encode, decode, encodestring, decodestring, b64encode,b64decode, urlsafe_b64decode,urlsafe_b64encode 其中,encode和decode為一組,用來解碼、編碼檔案的;encodestring和decodestring為一組,用來解碼、編碼字串的;b64encode和b64decode為一組,也可以用來解碼、編碼字串,同時具有替換字元的功能,比如:在某些特殊的場合使用base64時候,由於+和/的存在影響結果,於是會替換成別的字元,另外一個例子就是=的新增、刪除也在此方法中;urlsafe_b64decode和urlsafe_b64encode為一組,專門用來對URL進行解碼、編碼的。 以上幾個函式的使用規則就是傳入需要解碼或者編碼的字串,返回解碼或編碼後的字串。這裡不做詳細的說明。 2、Queue模組 Queue是佇列的建立與使用的一個函式,佇列就是邏輯上先進先出的一種的資料結構,主要的函式如下: queue(size)#建立並返回一個大小為size的佇列物件 queuename.qsize()#返回名字為queuename的佇列的大小 queuename.empty()#如果佇列為空返回True,否則返回False queuename.full()#如果佇列已滿返回True,否則返回False。 queuename.put(item,block=0)#把元素item放到佇列中,如果給了block(不為0),而且佇列已滿,函式會一直等待直到佇列有空間放入元素item為止 queuename.get(block = 0)#從佇列中取出一個物件,如果給了block(不為0),而且佇列已經為空,函式會一直等待直到佇列裡有元素並且取出為止。 佇列作用,除了資料結構上的優勢以外,還可以作為執行緒間的通訊媒介,使之同一程序的各個執行緒之間有序的共享記憶體空間。具體程式碼應用使用暫不做介紹。有關於程序、執行緒的概念可以參照下一篇部落格。