問(wèn)3個(gè)問(wèn)題后就理解了Base64編碼!
1.Base64編碼后的字符為”a~z A~Z 0~9 + /“共計(jì)64個(gè) 其中為什么要 + 和/?
?Base64編碼中,+和/是用于填充的字符。由于Base64編碼是將3個(gè)字節(jié)(24位)的數(shù)據(jù)轉(zhuǎn)換為4個(gè)字節(jié)(32位)的數(shù)據(jù),
?因此編碼后的字符串長(zhǎng)度會(huì)比原始數(shù)據(jù)長(zhǎng)1/3。為了保持編碼后的數(shù)據(jù)長(zhǎng)度為4的倍數(shù),需要使用+和/這兩個(gè)字符進(jìn)行填充。
?具體來(lái)說(shuō),如果編碼后的長(zhǎng)度不足4的倍數(shù),就在末尾添加相應(yīng)數(shù)量的+字符;
?如果長(zhǎng)度超過(guò)了4的倍數(shù),就從末尾開(kāi)始將每?jī)蓚€(gè)+替換為/,直到長(zhǎng)度為4的倍數(shù)為止。這樣,在解碼時(shí)就可以正確地還原原始數(shù)據(jù)了。
2.Base64 編碼有開(kāi)始符跟結(jié)束符?
是的,Base64編碼有開(kāi)始符和結(jié)束符。在標(biāo)準(zhǔn)的Base64編碼中,每四個(gè)字節(jié)的數(shù)據(jù)被編碼為六個(gè)字符,這六個(gè)字符分別是三個(gè)字母(A-Z,不區(qū)分大小寫(xiě))、三個(gè)數(shù)字(0-9)以及一個(gè)或兩個(gè)加號(hào)(+)。 因此,標(biāo)準(zhǔn)的Base64編碼字符串以"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"作為開(kāi)始,并以"="作為結(jié)束。 需要注意的是,有些情況下為了方便傳輸,可能會(huì)省略掉這些開(kāi)始符和結(jié)束符,只保留實(shí)際的數(shù)據(jù)部分。
3.為什么Base64能將 將三個(gè)字節(jié)的內(nèi)容表示為四個(gè)字節(jié)?
?Base64編碼將每三個(gè)字節(jié)的數(shù)據(jù)轉(zhuǎn)換為四個(gè)6位的二進(jìn)制數(shù), ?然后再將這四個(gè)6位的二進(jìn)制數(shù)分成兩組, ?每組兩個(gè),對(duì)應(yīng)著B(niǎo)ase64編碼表中的兩個(gè)字符。如果原始數(shù)據(jù)不足三個(gè)字節(jié), ?則在編碼結(jié)果中使用“=”來(lái)填充。