Ⅰ BASE64加密原理
1. Base64使用A--Z,a--z,0--9,+,/ 這64個字元.
2. 編碼原理:將3個位元組轉換成4個位元組( (3 X 8) = 24 = (4 X 6) )先讀入3個位元組,每讀一個位元組,左移8位,再右移四次,每次6位,這樣就有4個位元組了.
3. 解碼原理:將4個位元組轉換成3個位元組.先讀入4個6位(用或運算),每次左移6位,再右移3次,每次8位.這樣就還原了.
Ⅱ 有人知道十六進制轉到base64編碼的演算法嗎
base64是編碼,將不可見的16進制數據編碼為可見的ASCII文本,也就是他是一種編碼,而不是加密演算法,一般用反base64的演算法可以將編碼後的ASCII文本反轉為16進制數據
Ⅲ 各種base64演算法加解碼的結果是一樣的嗎
base64演算法是通用的一種演算法
理論上所有庫的實現結果應完全一樣,如果不一樣,就是bug,需要修改
Ⅳ 易語言 Base64的加密演算法
代碼-----------.版本 2.子程序 Base64編碼, 位元組集, 公開
.參數 原文, 位元組集
.局部變數 余數, 整數型
.局部變數 三位元組數據, 位元組型, , "3"
.局部變數 碼表, 位元組集
.局部變數 len_x, 整數型
.局部變數 len_y, 整數型
.局部變數 結果, 位元組集
.局部變數 i, 整數型
.局部變數 k, 整數型len_x = 取位元組集長度 (原文)
.如果真 (len_x < 1)
返回 ({ })
.如果真結束
余數 = len_x % 3
.如果真 (余數 > 0)
原文 = 原文 + 取空白位元組集 (3 - 余數)
len_x = len_x + 3 - 余數
.如果真結束
len_y = len_x × 4 ÷ 3
結果 = 取空白位元組集 (len_y)
i = 1
碼表 = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47 }
.變數循環首 (1, len_x, 3, k)
三位元組數據 [1] = 原文 [k]
三位元組數據 [2] = 原文 [k + 1]
三位元組數據 [3] = 原文 [k + 2]
結果 [i] = 碼表 [右移 (三位元組數據 [1], 2) + 1]
結果 [i + 1] = 碼表 [左移 (位與 (三位元組數據 [1], 3), 4) + 右移 (三位元組數據 [2], 4) + 1]
結果 [i + 2] = 碼表 [左移 (位與 (三位元組數據 [2], 15), 2) + 右移 (三位元組數據 [3], 6) + 1]
結果 [i + 3] = 碼表 [位與 (三位元組數據 [3], 63) + 1]
i = i + 4
.變數循環尾 ()
.判斷開始 (余數 = 2)
結果 [len_y] = 61
.判斷 (余數 = 1)
結果 [len_y] = 61
結果 [len_y - 1] = 61
.默認.判斷結束
返回 (結果).子程序 _按鈕1_被單擊編輯框1.加入文本 (到文本 (Base64編碼 (到位元組集 (編輯框1.內容))))
希望我可以幫到你
Ⅳ hex 和 base64的區別
按照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 為什麼要使用Base64? 在設計這個編碼的時候,我想設計人員最主要考慮了3個問題: 1.是否加密? 2.加密演算法復雜程度和效率 3.如何處理傳輸? 加密是肯定的,但是加密的目的不是讓用戶發送非常安全的Email。這種加密方式主要就是「防君子不防小人」。即達到一眼望去完全看不出內容即可。 基於這個目的加密演算法的復雜程度和效率也就不能太大和太低。和上一個理由類似,MIME協議等用於發送Email的協議解決的是如何收發Email,而並不是如何安全的收發Email。因此演算法的復雜程度要小,效率要高,否則因為發送Email而大量佔用資源,路就有點走歪了。 但是,如果是基於以上兩點,那麼我們使用最簡單的愷撒法即可,為什麼Base64看起來要比愷撒法復雜呢?這是因為在Email的傳送過程中,由於歷史原因,Email只被允許傳送ASCII字元,即一個8位位元組的低7位。因此,如果您發送了一封帶有非ASCII字元(即位元組的最高位是1)的Email通過有「歷史問題」的網關時就可能會出現問題。網關可能會把最高位置為0!很明顯,問題就這樣產生了!因此,為了能夠正常的傳送Email,這個問題就必須考慮!所以,單單靠改變字母的位置的愷撒之類的方案也就不行了。關於這一點可以參考RFC2046。 基於以上的一些主要原因產生了Base64編碼。 演算法詳解 Base64編碼要求把3個8位位元組(3*8=24)轉化為4個6位的位元組(4*6=24),之後在6位的前面補兩個0,形成8位一個位元組的形式。 具體轉化形式間下圖: 字元串「張3」 11010101 11000101 00110011 00110101 00011100 00010100 00110011 表1 可以這么考慮:把8位的位元組連成一串110101011100010100110011 然後每次順序選6個出來之後再把這6二進制數前面再添加兩個0,就成了一個新的位元組。之後再選出6個來,再添加0,依此類推,直到24個二進制數全部被選完。 讓我們來看看實際結果: 字元串「張3」 11010101 HEX:D5 11000101 HEX:C5 00110011 HEX:33 00110101 00011100 00010100 00110011 字元』5』 字元』^\』 字元』^T』 字元』3』 十進制53 十進制34 十進制20 十進制51 表2 這樣「張3 」這個字元串就被Base64表示為」5^\^T3」了么?。錯! Base64編碼方式並不是單純利用轉化完的內容進行編碼。像』^\』字元是控制字元,並不能通過計算機顯示出來,在某些場合就不能使用了。Base64有其自身的編碼表: Table 1: The Base64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v (pad) = 14 O 31 f 48 w 15 P 32 g 49 x 16 Q 33 h 50 y 表3 這也是Base64名稱的由來,而Base64編碼的結果不是根據演算法把編碼變為高兩位是0而低6為代表數據,而是變為了上表的形式,如」A」就有7位,而」a」就只有6位。表中,編碼的編號對應的是得出的新位元組的十進制值。因此,從表2可以得到對應的Base64編碼: 字元串「張3」 11010101 HEX:D5 11000101 HEX:C5 00110011 HEX:33 00110101 00011100 00010100 00110011 字元』5』 字元』^\』 字元』^T』 字元』3』 十進制53 十進制34 十進制20 十進制51 字元』1』 字元』i』 字元』U』 字元』z』 表4 這樣,字元串「張3」經過編碼後就成了字元串「1iUz」了。 Base64將3個位元組轉變為4個位元組,因此,編碼後的代碼量(以位元組為單位,下同)約比編碼前的代碼量多了1/3。之所以說是「約」,是因為如果代碼量正好是3的整數倍,那麼自然是多了1/3。但如果不是呢? 細心的人可能已經注意到了,在The Base64 Alphabet中的最後一個有一個(pad) =字元。這個字元的目的就是用來處理這個問題的。 當代碼量不是3的整數倍時,代碼量/3的余數自然就是2或者1。轉換的時候,結果不夠6位的用0來補上相應的位置,之後再在6位的前面補兩個0。轉換完空出的結果就用就用「=」來補位。譬如結果若最後餘下的為2個位元組的「張」: 字元串「張」 11010101 HEX:D5 11000101 HEX:C5 00110101 00011100 00010100 十進制53 十進制34 十進制20 pad 字元』1』 字元』i』 字元』U』 字元』=』 表6 這樣,最後的2個位元組被整理成了「1iU=」。 同理,若原代碼只剩下一個位元組,那麼將會添加兩個「=」。只有這兩種情況,所以,Base64的編碼最多會在編碼結尾有兩個「=」 至於將Base64的解碼,只是一個簡單的編碼的逆過程。
Ⅵ AES+BASE64演算法加密後,密文是JfdQlodleoekfeoiefwoHokY== , 最後2個=,可以解密,3個=也可以解密出
=號是用用湊長度的..沒有實際含意..只於有幾個=號那就要看前面那些字母的長度...前面的字母長度加上等號的個數為3的整倍數...你說的後兩個二號三個等號是不正確的..因為定義加密後的長度必需為3的整倍數
Ⅶ 關於java中BASE64解碼演算法
讓我們再來看一個實際的例子,加深印象!
轉換前 10101101 10111010 01110110
轉換後 00101011 00011011 00101001 00110110
十進制 43 27 41 54
對應碼表中的值 r b p 2
將第一個字元右移2位得00101011, 得第一個目標字元00101011
將第一個字元左移4位得11010000,第二個字元右移4位的00001011相加得第二個目標字元11011011
將第二個字元左移2位得11101000,第三個字元右移6位的00000001相加的第三個目標字元11101001
第四個目標字元就是01110110
然後讓各個目標字元與0x3F進行and位操作,讓最高的兩位為零。
Ⅷ 什麼是BASE64編碼
Base64是網路上最常見的用於傳輸8Bit位元組代碼的編碼方式之一,在發送電子郵件時,伺服器認證的用戶名和密碼需要用Base64編碼,附件也需要用Base64編碼。
下面簡單介紹Base64演算法的原理,由於代碼太長就不在此貼出
Base64要求把每三個8Bit的位元組轉換為四個6Bit的位元組(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的位元組,也就是說,轉換後的字元串理論上將要比原來的長1/3。
轉換後,我們用一個碼表來得到我們想要的字元串(也就是最終的Base64編碼),這個表是這樣的:
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
原文的位元組最後不夠3個的地方用0來補足,轉換時Base64編碼用=號來代替。這就是為什麼有些Base64編碼會以一個或兩個等號結束的原因,但等號最多隻有兩個。
舉一個例子,abc經過Base64編碼以後的結果是YWJj.
發郵件的時候所寫的信息自動在後台轉換然後傳輸...
參考資料: http://www.luocong.com/articles/show_article.asp?Article_ID=17
Ⅸ 什麼是Base64
Base64是網路上最常見的用於傳輸8Bit位元組代碼的編碼方式之一,在發送電子郵件時,伺服器認證的用戶名和密碼需要用Base64編碼,附件也需要用Base64編碼。
下面簡單介紹Base64演算法的原理,由於代碼太長就不在此貼出
Base64要求把每三個8Bit的位元組轉換為四個6Bit的位元組(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的位元組,也就是說,轉換後的字元串理論上將要比原來的長1/3。
轉換後,我們用一個碼表來得到我們想要的字元串(也就是最終的Base64編碼),這個表是這樣的:
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
原文的位元組最後不夠3個的地方用0來補足,轉換時Base64編碼用=號來代替。這就是為什麼有些Base64編碼會以一個或兩個等號結束的原因,但等號最多隻有兩個。
舉一個例子,abc經過Base64編碼以後的結果是YWJj.
發郵件的時候所寫的信息自動在後台轉換然後傳輸...