base64加密原理

2021-09-13 10:05:14 字數 1478 閱讀 5540

今天面試被問到以前的專案有沒有用到網路傳輸加密,當時腦袋抽風沒想起來直接說了沒有。回來後看書看到了base64幾個字,頓時醒悟了過來。

****!明明最近的專案就用到了base64方法加密的,只是做的比較久遠了,後面又沒怎麼改動過,就把它忽略了。既然這樣,那就白紙黑字記下來吧,以免下次腦袋抽風。

首先,base64編碼的原理是先將原始檔以標準位元組(byte)為單位轉化成二進位制,乙個位元組佔8個位(bit),如「abc」的二進位制是01000001、01000010、01000011,這樣原始檔就形成了每8個bit一組的一串二進位制,然後將這些二進位制串以base64特有的規則(每個位元組佔6個位)再轉化成base64格式的字元(如下圖),編碼完成。解碼就是這個過程反過來。

"abc"的轉化為base64字元的邏輯如下:

a                      b                 c

ascii十進位制                          65                      66                67

8bit/byte                           01000001       01000010     01000011

6bit/byte                           010000    010100    001001    000011

base64十進位制                       16            20           9              3

base64字元                            q             u            j              d

這樣,"abc"三個標準字元就轉化成了"qujd"四個base64字元。

明眼人就會發現,base64編碼以後位元組數會增加,事實上也確實如此,因為原先8個佔位的位元組轉化成了6個佔位的位元組,每3個原先的位元組就轉化成了4個base64位元組。這算是base64編碼的乙個***吧。先忽略這個,講重點。

現在問題來了,既然編碼和解碼的規律是固定的大家都知道,那還怎麼起到加密的作用呢?

這種編碼的方式有個特點,就是解碼的時候要麼從最前面的位元組往後推,要麼從最後的位元組往前推,最前面和最後面的位元組可以直接影響到全部的解碼結果。跟多公尺諾骨牌一樣,乙個錯誤,後面都會跟著錯誤。

既然這樣,我們在原始檔的最前面和最後面分別加上乙個簡單的字元,那解碼出來的檔案內容就跟原始檔相差了十萬八千里,因為第乙個不對,那以此類推,後面的解碼都會錯誤。

基於這種原理,我們採取的方法就是編碼前,在原始檔的前後分別加上干擾字元,為了增加破譯的難度,這些字元可以稍微複雜點,但是要提前告知服務端的同學這種加密的格式,這樣服務端才能在解碼時排除干擾字元得到正確的內容。

好了,原理就是這些了。其他的加密方法還有待進一步研究,到時候再做個對比。

base64加密原理

以加密字串 hkmayfly 為例子 將待加密字串的每個字元轉換為對應ascii碼的二進位制形式並拓展為8位。每3個字元為一組,共24位,每6位劃分為一組,不足6位在末尾添0,並轉換為對應的十進位制。不足3個字元,最後取字元時,用 代替 這裡問號可以忽略,只是為了方便理解 將base64的值對照索引...

Base64 加密演算法原理

base64是網路上最常見的用於傳輸8bit位元組碼的編碼方式之一,base64就是一種基於64個可列印字元來表示二進位制資料的方法。因為在記憶體中每個位元組佔8位,即 1 byte 8 bit,所有的資料都可以先轉成ascii碼,然後將對應的ascii碼轉為8位長度的二進位制資料,比如 s 對應 ...

Base64加密解密

public class base64 對應asicc字元的位置 public static string base64encode string str c2 str i if i len c3 str i out base64encodechars c1 2 out base64encodech...