Base64編碼轉換原理

2021-05-24 21:36:34 字數 1891 閱讀 4290

原文:

base64編碼轉換原理-c語言

base64是一種加密方法。它的特點是:1、速度非常快。2、能夠將字串a轉換成字串b,而且如果你光看字串b,是猜不出字串a的內容來的。

base64編碼其實是將3個8位位元組轉換為4個6位位元組,( 3*8 = 4*6 = 24 ) 這4個六位位元組其實仍然是8位,只不過高兩位被設定為0. 當乙個位元組只有6位有效時,它的取值空間為0到 2的6次方減1 即63,也就是說被轉換的base64編碼的每乙個編碼的取值空間為(0~63)。

事實上,0~63之間的ascii碼有許多不可見字元,所以應該再做乙個對映,

對映表『a『 ~ 『z『 ? ascii(0 ~ 25)

『a』 ~ 『z『 ? ascii(26 ~ 51)

『0』 ~ 『9『 ? ascii(52 ~ 61)

『+『 ? ascii(62)

『/『 ? ascii(63)

這樣就可以將3個8位位元組,轉換為4個可見字元。

具體的位元組拆分方法為:

aaaaaabb ccccdddd eeffffff

~~~~~~~~ ~~~~~~~~ ~~~~~~~~

位元組 1 位元組 2 位元組 3

││//

00aaaaaa 00bbcccc 00ddddee 00ffffff

注:上面的三個位元組位原文,下面四個位元組為base64編碼,其前兩位均為0。

這樣拆分的時候,原文的位元組數量應該是3的倍數,當這個條件不能滿足時,用全零位元組

補足,轉化時base64編碼用=號代替,這就是為什麼有些base64編碼以乙個或兩個等號結

束的原因,但等號最多有兩個,因為:如果f(origin)代表原文的位元組數,f(remain)代

表餘數,則

f(remain) = f(origin) mod 3 成立。

所以f(remain)的可能取值為0,1,2.

如果設 n = [f(origin) – f(remain)] / 3

當f(remain) = 0 時,恰好轉換為4*n個位元組的base64編碼。

當f(remain) = 1 時,由於乙個原文位元組可以拆分為屬於兩個base64編碼的位元組,為了

讓base64編碼是4的倍數,所以應該為補2個等號。

當f(remain) = 2 時,由於兩個原文位元組可以拆分為屬於3個base64編碼的位元組,同理,

應該補上乙個等號。

下面給出base64的編碼和解碼的c語言描述: 

/*base64編碼*/ 

void base64(unsigned char chasc[3],unsigned char chuue[4]) 

/* chasc:未編碼的二進位制** 

chuue:編碼過的base64** 

*/  

*(chuue+3)=*(chasc+2)&63; 

for(i=0;i<4;i++) 

if((*(chuue+i)>=0)&&(*(chuue+i)<=25)) *(chuue+i)+=65; 

else if((*(chuue+i)>=26)&&(*(chuue+i)<=51)) *(chuue+i)+=71; 

else if((*(chuue+i)>=52)&&(*(chuue+i)<=61)) *(chuue+i)-=4; 

else if(*(chuue+i)==62) *(chuue+i)=43; 

else if(*(chuue+i)==63) *(chuue+i)=47; 

} /*base64解碼*/ 

void unbase64(unsigned char chuue[4],unsigned char chasc[3]) 

/* chuue:未解碼的base64** 

chasc:解碼過的二進位制** 

*/  }

BASE64 編碼原理

unit ubase64 編碼原理 將3個位元組轉換成4個位元組 3 x 8 24 4x6 先讀入3個位元組,每讀乙個位元組,左移8位,再右移四次,每次6位,這樣就有4個 位元組了。解碼原理 將4個位元組轉換成3個位元組,先讀入4個6位 用或運算 每次左 移6位,再右移3次,每次8位,這樣就還原了。...

Base64編碼原理

一 base64編碼原理 1 base64編碼原理簡單介紹 base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理論上將要比原來的長1 3。編碼原理如下所示 1 base64的編碼都是...

Base64編碼原理

所謂base64,就是說選出64個字元 小寫字母a z 大寫字母a z 數字0 9 符號 再加上作為墊字的 實際上是65個字元 作為乙個基本字符集。然後,其他所有符號都轉換成這個字符集中的字元。具體來說,轉換方式可以分為四步。第一步,將每三個位元組作為一組,一共是24個二進位制位。第二步,將這24個...