Base64 编码

Posted RushoutAsia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Base64 编码相关的知识,希望对你有一定的参考价值。

换行:

The encoded output stream must be represented in lines of no more than 76 characters each。

MIME规定,base64编码中,每76个字符后,要加一个\n

避免换行:

android:

通过指定标志位:Base64.NO_WRAP

Base64编码表及示例:

 Char   ValueChar   ValueChar   ValueChar
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Text content

  M    
ASCII 77 (0x4d) 0 (0x00) 0 (0x00)
Bit pattern 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Index 19 16 0 0
Base64-encoded T Q = =

If there were two significant input bytes (say ‘Ma‘), the first three base64 digits are picked (18 bits). ‘=‘ characters might be added to make the last block contain four base64 characters.

Text content M a  
ASCII 77 (0x4d) 97 (0x61) 0 (0x00)
Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0
Index 19 22 4 0
Base64-encoded T W E =

As a result, when the last input group contains only one octet, the four least significant bits of the last used 6-bit block are set to zero:

Bit pattern 0 1 0 0 0 0
Index 16
Base64-encoded Q

And when the last input group contains two octets, the two least significant bits of the last used 6-bit block are set to zero:

Bit pattern 0 0 0 1 0 0
Index 4
Base64-encoded E

Padding

The ‘==‘ sequence indicates that the last group contained only one byte, and ‘=‘ indicates that it contained two bytes. The example below illustrates how truncating the input of the whole of the above quote changes the output padding:

LengthInputLengthOutputPadding
20 any carnal pleasure. 28 YW55IGNhcm5hbCBwbGVhc3VyZS4= 1
19 any carnal pleasure 28 YW55IGNhcm5hbCBwbGVhc3VyZQ== 2
18 any carnal pleasur 24 YW55IGNhcm5hbCBwbGVhc3Vy 0
17 any carnal pleasu 24 YW55IGNhcm5hbCBwbGVhc3U= 1
16 any carnal pleas 24 YW55IGNhcm5hbCBwbGVhcw== 2

The same characters will be encoded differently depending on their position within the three-octet group which is encoded to produce the four characters. For example:

InputOutput
pleasure. cGxlYXN1cmUu
leasure. bGVhc3VyZS4=
easure. ZWFzdXJlLg==
asure. YXN1cmUu
sure. c3VyZS4=

以上是关于Base64 编码的主要内容,如果未能解决你的问题,请参考以下文章

使用OpenSSL进行Base64编码和解码

令仔代码收藏系列----BASE64编码

什么是BASE64编码?

用于解码/编码修改后的 base64 URL 的代码

BASE64编码原理与Golang代码调用

c# Base64编码和图片的互相转换代码