密碼學【二】(1 / 3)

這一期我們要講的密碼學和上一期有所區別,也正如上一期所說的,這一期我們會講一些單

向的哈希函數

首先我們不講哈希函數,先說一下 base 編碼

base 編碼有一個很明顯的特征就是以\u003d\u003d結尾

base 編碼有很多種

Base32 編碼是使用 32 個可打印字符(字母 A-Z 和數字 2-7)對任意字節數據進行編碼的方

案,編碼後的字符串不用區分大小寫並排除了容易混淆的字符,可以方便地由人類使用並由

計算機處理

Base32 將任意字符串按照字節進行切分,並將每個字節對應的二進製值(不足 8 比特高位

補 0)串聯起來,按照 5 比特一組進行切分,並將每組二進製值轉換成十進製來對應 32 個

可打印字符中的一個。

由於數據的二進製傳輸是按照 8 比特一組進行(即一個字節),因此 Base32 按 5 比特切分的

二進製數據必須是 40 比特的倍數(5 和 8 的最小公倍數)。例如輸入單字節字符“%”,它對

應的二進製值是“100101”,前麵補兩個 0 變成“00100101”(二進製值不足 8 比特的都要

在高位加 0 直到 8 比特),從左側開始按照 5 比特切分成兩組:“00100”和“101”,後一組

不足 5 比特,則在末尾填充 0 直到 5 比特,變成“00100”和“10100”,這兩組二進製數分

別轉換成十進製數,通過上述表格即可找到其對應的可打印字符“E”和“U”,但是這裏隻

用到兩組共 10 比特,還差 30 比特達到 40 比特,按照 5 比特一組還需 6 組,則在末尾填充

6 個“\u003d”。填充“\u003d”符號的作用是方便一些程序的標準化運行,大多數情況下不添加也無

關緊要,而且,在 URL 中使用時必須去掉“\u003d”符號。

Base64

Base64 是一種基於 64 個可打印字符來表示二進製數據的表示方法。由於,所以每 6 個

比特為一個單元,對應某個可打印字符。3 個字節有 24 個比特,對應於 4 個 Base64 單元,

即 3 個字節可由 4 個可打印字符來表示。

在 Base64 中的可打印字符包括字母 A-Z、a-z、數字 0-9,這樣共有 62 個字符,此外兩個

可打印符號在不同的係統中而不同。一些如 uuencode 的其他編碼方法。

它可用來作為電子郵件的傳輸編碼Base64 常用於在通常處理文本數據的場合,表示、傳輸、存儲一些二進製數據,包括

MIME 的電子郵件及 XML 的一些複雜數據。

Base85

base85 也稱為 Ascii85,是 Paul E. Rutter 為 btoa 實用程序開發的一種二進製文本

編碼形式。通過使用五個 ASCII 字符來表示四個字節的二進製數據(使編碼量 1 / 4 比原來大,

假設每 ASCII 字符 8 個比特),它比更有效 UUENCODE 或 Base64 的,它使用四個字符來表示

三個字節的數據(1 / 3 的增加,假設每 ASCII 字符 8 個比特)。