Base64的編碼實現原理攻略

  • Base64算法有編碼和解碼操作,可充當加密和解密的操作,還有一張字符映射表充當了密鑰。
  • Base64算法公開,這與 柯克霍夫原則並無違背,但充當密鑰的字符映射表公開,直接違反了 柯克霍夫原則
密碼學上的柯克霍夫原則(Kerckhoffs's principle,也稱為柯克霍夫假說、公理、或定律)系由奧古斯特·柯克霍夫在19世紀提出:即使密碼系統的任何細節已為人悉知,只要密匙(key,又稱密鑰或秘鑰)未洩漏,它也應是安全的。
  • Base64算法不能稱為加密算法,但其變換法則遵從了單表置換算法。

2 Base64的索引表

Base64的索引表,我們可以理解為加密密文的構成,密文中的字符選用了"A-Z、a-z、0-9、+、/" 64個可打印字符,這是標準的Base64協議規定。在日常使用中我們還會看到“=”或“==”號出現在Base64的編碼結果中,“=”在此是作為填充字符出現

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

3 編碼表

簡單點來說,一串明文經過一系列轉換後,生成對應十進制數值,然後參照編碼表,通過單表置換來通過編碼字符來表示密文。

Base64的編碼實現原理攻略

4 Base64 編碼實現過程

通常以字符串使用 Base64 編碼(加密),字符串是以字符構成,在編碼過程中,以字符為基本單元,如下圖中所示:

Base64的編碼實現原理攻略

編碼過程實現

  • 第一步: “M”、“a”、"n" 對應的ASCII碼值分別為77,97,110,獲取對應的二進制值 01001101、01100001、01101110。如圖第二三行所示,由此組成一個24位的二進制字符串。
  • 第二步:對獲得的二進制碼做分組轉換操作,每3個8位二進制碼為一組,轉換為每4個6位二進制碼為一組(不足6位時低位補0)如圖紅色框,將24位每6位二進制位一組分成四組,這是一個分組變化的過程,3個8位二進制碼和4個6位二進制碼的長度都是24位,
  • 第三步: 對獲得的4個6位的二進制碼補位,向6位二進制碼添加2位高位0,組成4個8位二進制碼 ,添加2位高位0,組成4個8位二進制碼,擴展成32個二進制位,此時變為四個字節:00010011、00010110、00000101、00101110。
  • 第四步 將獲得的4個8位二進制碼轉換為十進制碼,在上面的數據中,00010011、00010110、00000101、00101110 分別對應的十進制的值為:19、22、5、46。 第五步:用上面獲得到的十進制的值(Base64編碼索引)在Base64編碼表中進行查找,分別對應:T、W、F、u。因此“Man”Base64編碼之後就變為:TWFu。

位數不足情況

Base64的編碼實現原理攻略

5 非 ASCII碼字符編碼

ASCII 碼可以表示十進制範圍為 0-127的字符,對應二進制範圍是 0000 0000 -0111 1111

ASCII 碼包括阿拉伯數字、大小寫英文字母和一些控制符,但卻沒有包含雙字節編碼的字符,如中文字符,因此有了 GB2312 、GBK、 UTF-8 等編碼,GB2312 、GBK用2個字節表示一個漢字,UTF-8用三個字節表示一個漢字。


分享到:


相關文章: