C# 郵件的Base64 編碼介紹
阿新 • • 發佈:2019-02-04
郵件一般採用 Base64 編碼:
1、Base64 編碼編碼介紹:
Base64要求把每三個8Bit的位元組轉換為四個6Bit的位元組(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的位元組,也就是說,轉換後的字串理論上將要比原來的長1/3。當所要編碼的資料的位元組數不是3的整倍數,也就是說在分組時最後一組不夠3個位元組。這時在最後一組填充1到2個0位元組。並在最後編碼完成後在結尾新增1到2個 “=”。 BASE64字元表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/編碼的規則:
1、ABC組合對應的ASCII碼值:A(65)B(66)C(67)。
2、轉化成二進位制:A(01000001)B(01000010)C(01000011),組合在一起為:(010000010100001001000011)。
3、 將組合均勻分成四份,並在沒份的前面新增鏈兩個0,組合成符合Base64 的四個位元組,(00010000)(00010100)(00001001)(00000011),其中紅色部分為原始資料。
4、將四個位元組資料轉化成10進位制數得16、20、9、3,然後根據Base64
字元表 查找出對應的ASCII碼字元Q、U、J、D。“QUJD” 就是ABC進行 Base64 轉化後的結果。
5、關於餘數 (= 原文位元組數 MOD 3)不等於0:如果是1的話,為了讓Base64編碼是3的倍數,就要補2個等號;同理,如果是2的話,就要補1個等號。例:將A 進行Base64編碼:不足三個位元組(01000001)轉化後(00010000,0001),將位元組位數不夠的用0 補全,空缺的位元組用“=”填補(00010000,00010000,=,=)。轉換後的Base64 碼為:“QQ==”。
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 | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
2、Base64 編碼 程式實現:
C#自帶 Base64 編碼 加密和解密的方法: 加密: System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(sourceString));解密:需要引數Base64String為base-64編碼格式,如果不是,將丟擲異常。 System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(Base64String));