Base64的編碼實現原理攻略

Base64的編碼原理算法

更多可查看 點擊這裏了安全

本文將實現:編碼

  • 簡述 ASCII碼字符編碼的Base64 編碼實現原理
  • 簡述 非ASCII碼字符編碼的Base64 編碼實現原理

加密分析系列文章:加密

  • Base64 編碼實現原理(就是本文了)
  • Url Base64 編碼算法實現原理(正在發文中)
  • MD5 算法系列實現原理 (正在發文中)
  • SHA 算法系列實現原理(正在發文中)
  • MAC 算法系列實現原理(正在發文中)
  • 對稱加密 DES (正在發文中)
  • 對稱加密 AES(正在發文中)
  • 基於口令加密 PBE(正在發文中)
  • 非對稱加密 DH(正在發文中)
  • 非對稱加密 RSA(正在發文中)

1 簡述

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

2 Base64的索引表

Base64的索引表,咱們能夠理解爲加密密文的構成,密文中的字符選用了"A-Z、a-z、0-九、+、/" 64個可打印字符,這是標準的Base64協議規定。在平常使用中咱們還會看到「=」或「==」號出如今Base64的編碼結果中,「=」在此是做爲填充字符出現.net

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

3 編碼表

簡單點來講,一串明文通過一系列轉換後,生成對應十進制數值,而後參照編碼表,經過單表置換來經過編碼字符來表示密文。 在這裏插入圖片描述code

4 Base64 編碼實現過程

一般以字符串使用 Base64 編碼(加密),字符串是以字符構成,在編碼過程當中,以字符爲基本單元,以下圖中所示: 在這裏插入圖片描述blog

編碼過程實現
  • 第一步: 「M」、「a」、"n" 對應的ASCII碼值分別爲77,97,110,獲取對應的二進制值 0100110一、0110000一、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個二進制位,此時變爲四個字節:000100十一、000101十、0000010一、00101110。
  • 第四步 將得到的4個8位二進制碼轉換爲十進制碼,在上面的數據中,000100十一、000101十、0000010一、00101110 分別對應的十進制的值爲:1九、2二、五、46。 第五步:用上面得到到的十進制的值(Base64編碼索引)在Base64編碼表中進行查找,分別對應:T、W、F、u。所以「Man」Base64編碼以後就變爲:TWFu。
位數不足狀況

在這裏插入圖片描述

5 非 ASCII碼字符編碼

ASCII 碼能夠表示十進制範圍爲 0-127的字符,對應二進制範圍是 0000 0000 -0111 1111索引

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

非 ASCII碼字符編碼 加密實現過程

咱們以字符串 「密」 爲例ip

  • 第一步 獲取 字符串 「密」 對應的 utf-8 的編碼爲 -27,-81,-122
  • 第二步 分別獲取上述 utf-8 編碼(-27,-81,-122)對應的二進制碼:11100101 10101111 10000110
  • 第三步 將上述二進制碼分紅4組6位 111001 011010 111110 000110
  • 第四步 向6位二進制碼添加2位高位0,組成4個8位二進制碼,添加2位高位0,00111001 00011010 00111110 00000110
  • 第五步 獲取上述二進制碼對應的十進制碼 57 26 62 6
  • 第六步 在Base64編碼表中進行查找,分別對應 5 a + G

字符串 「密」 通過 Base64 編碼後獲得字符串 "5a+G"

6 分析

在這裏 Base64(2的6次冪就是64)將字符轉成的8位二進制碼以6位爲單位進行分組轉換 表示字符,所以成爲Base64。同理,Base32就是用5位分組,Base16就是用4位分組。

因此 Base32 、Base16編碼過程也就一目瞭然了。

相關文章
相關標籤/搜索