Base64作爲一個歷史悠久的算法,起初是爲了電子郵件的傳輸而創立。因爲它的算法和對應表公開, 所以Base64從嚴格意義上來說並不能算是現代加密算法。
如今學習Base64的意義在於 ,以它爲例,學習單表置換算法。而且Base64經過改造後,可以達到加密的效果。
對於Base64算法來說,字符原本的編碼格式很重要(這點可在後文算法的詳細步驟中看出),不同的編碼對結果影響差別很大。
具體步驟:
1)字符串以字符爲單位轉換爲對應編碼
這裏以ASCII碼來舉例:取三個字符爲一組,按照ASCII的錶轉化爲24位二進制數字。
注意:24位二進制很重要,這就是爲什麼要以三個字符爲一組的原因。 所以在其他編碼形式(如用到漢字時的GBK、UTF-18)從24位二進制倒推回編碼前所要求的字符個數(如UTF-18裏一個漢字是2-4個字節,當一個漢字爲三字節時,就以這一個漢字爲一組)
這裏只列了兩個字符,有助於理解算法中是如何補位的
2)編碼轉換爲二進制
十進制轉二進制
3)3個8位二進制,轉爲4個6位二進制
分組方式改變,例子如下
分到第三個時,剩下的不夠6位,在後面補零
4)4個6位二進制分別在高位加2個0
至此變爲4個8位二進制,也就解釋了base64編碼後字符創的長度會增加三分之一左右。
5)4個8位二進制轉爲十進制
二進制轉十進制
6)依據Base64的字符錶轉化
64個字符對應0到63的數字。而Base64的名字正是由此而來。(還有Base32、Base16算法)
最後還應加上=,等號是用來補位的。
綜上所述,輸入Me,經過編碼後得出TWU=
解碼的過程不再贅述,按編碼方法倒推即可。
網上有在線的Base64自動編碼器,自己手工算過後,可以對照進行檢查。
本篇主要是爲了瞭解此算法的原理,在實際應用操作中使用兩個方法(對於Java)就可以完成,這部分以後會說。
這篇文章爲博主原創,未經允許不得轉載。
有什麼不足請多多指出,一起學習進步~~