我們接著上一節。
上一節我們講述了ascii編碼,接下來的base系列編碼與ascii之間聯絡非常緊密。好,我們繼續講解。
base系列編碼:
ascii 是用128(2^8)個字元,對二進位制資料進行編碼的方式,
base64編碼是用64(2^6)個字元,對二進位制資料進行編碼的方式
base32就是用32(2^5)個字元,對二進位制資料進行編碼的方式
base16就是用16(2^4)個字元,對二進位制資料進行編碼的方式
這裡我們可以清楚的看到,base系列編碼之間的不同,在於用於編碼的字元數量的多少。
那我們如何直接區分出base16、32、64編碼呢?
那可以從編碼字元的數量方面入手,對於base16,用於編碼的字元只有:1-9,a-f ,只有簡單的15個字元。對於base32而言,編碼字元有了明顯改變,由base16的型別轉變為了a-z,2-7。作為base系列中最完善的base64編碼,是在base32的基礎上,增加了"a-z,0,1,8,9,+,/",以及特殊填充字元"="
base-64編碼將乙個8位子節序列拆散為6位的片段,並為每個6位的片短分配乙個字元,這個字元是base-64字母表中的64個字元之一。
編碼解碼過程:
base系列編碼過程都類似,所以我們用base64來說明
base64填充
base64編碼收到乙個8位位元組序列,將這個二進位制序列流劃分成6位的塊。二進位制序列有時不能正好平均地分為6位的塊,在這種情況下,就在序列末尾填充零位,使二進位制序列的長度成為24的倍數(6和8的最小公倍數)。
對已填充的二進位制進行編碼時,任何完全填充(不包括原始陣列中的位)的6位組都有特殊的第65個符號"=「表示。如果6位組是部分填充的,就將填充位設定為0.
下面會寫乙個填充例項。初始輸入字串為"a:a"為3個位元組(24位)。24是6和8的倍數,因此按照上面給出的例子計算。無需填充就會得到base64編碼為"ytph」。
然而,再增加乙個字元,輸入字串變為"a:aa",轉換為二進位制就會有32位長。而6和8的下乙個公倍數為48.因此要新增16為的填充碼。填充的前4位是與資料位混合在一起的。得到的6位組01***x,會被當作010000、十進位制中的16,或者base64編碼的q來處理。剩下的兩個6位組都是填充碼,用=來表示。
a:a -- 011000 010011 101001 100001 -- ytph
a:aa -- 011000 010011 101001 100001 011000 01***x ****** ****** -- ytphyq==
a:aaa -- 011000 010011 101001 100001 011000 010110 0001xx ****** -- ytphywe=
a:aaaa -- 011000 010011 101001 100001 011000 010110 000101 1000001 -- ytphywfh
下一節我們講述unicode編碼
密碼學實驗二
miller rabin檢測 miller rabin檢測是目前應用比較廣泛的一種 二次探測定理 如果p是乙個素數,且0這就是miller rabin素性測試的方法。不斷地提取指數n 1中的因子2,把n 1表示成d 2 r 其中d是乙個奇數 那麼我們需要計算的東西就變成了a的d 2 r次方除以n的餘...
基本密碼學演算法之 Base64
所謂base64,就是說選出64個字元 小寫字母a z 大寫字母a z 數字0 9 符號 再加上作為墊字的 實際上是65個字元 作為乙個基本字符集。然後,其他所有符號都轉換成這個字符集中的字元。具體來說,轉換方式可以分為四步。第一步,將每三個位元組作為一組,一共是24個二進位制位。第二步,將這24個...
區塊鏈入門筆記(四) 密碼學
密碼學是研究編制密碼和破譯密碼的技術科學。密碼學分為對稱密碼和雜湊密碼。表示明文 表示秘鑰 表示密文表示 加密函式 d表示解密 函式 對稱密碼又包含分組密碼和序列密碼 分組密碼以乙個資料塊為單位進行加密,將明文訊息編碼表示後的數字序列,劃分成長度為n的組,每組分別在金鑰的控制下變換成等長的輸出數字序...