http傳輸中base64編碼數(shù)據(jù)
http為文本傳輸協(xié)議
Base64和ASCII的區(qū)別
ASCII碼的范圍是0-127顷歌,其中0-31和127這33個(gè)字符屬于控制字符牢裳,剩下的32-126這95個(gè)字符屬于可打印字符荒揣,包含了數(shù)字、大小寫字母和常用符號等瓷翻。他們與十進(jìn)制的對應(yīng)關(guān)系如下:
ascii編碼表
這里面的某些字節(jié)在某些傳輸渠道中不支持, 比如郵件傳輸SMTP協(xié)議就不支持上面ASCII碼中的控制字符, 只能傳輸可打印的ASCII字符。另外當(dāng)byte值>127時(shí)枉圃,就超出了ASCII的表示范圍,Base64的創(chuàng)建就是為了解決此問題庐冯。
base64是一種編碼算法孽亲,Base64內(nèi)的64是指64個(gè)字符【可打印字符】, 分別是 A-Z, a-z, 0-9, +, /它們與十進(jìn)制的對應(yīng)關(guān)系如下:
base64字符編碼表
Base64采用6bit字符表達(dá)了原本的8bit字符,它可以將原本ACSII碼的控制字符以及ASCII碼之外的byte數(shù)字都轉(zhuǎn)換成可打印的64位字符展父。
Base64編碼原理
- 1)將所有字符轉(zhuǎn)化為ASCII碼返劲;
- 2)將ASCII碼轉(zhuǎn)化為8位二進(jìn)制;
- 3)將二進(jìn)制3個(gè)歸成一組(不足3個(gè)在后邊補(bǔ)0)共24位栖茉,再拆分成4組篮绿,每組6位;
- 4)統(tǒng)一在6位二進(jìn)制前補(bǔ)兩個(gè)0湊足8位吕漂;
- 5)將補(bǔ)0后的二進(jìn)制轉(zhuǎn)為十進(jìn)制亲配;
- 6)從Base64編碼表獲取十進(jìn)制對應(yīng)的Base64編碼;例如編碼Man:
編碼Man
字節(jié)數(shù)不為3的倍數(shù)時(shí)的處理過程
如果要編碼的字節(jié)數(shù)不能被3整除惶凝,最后會多出1個(gè)或2個(gè)字節(jié)吼虎,那么可以使用下面的方法進(jìn)行處理:先使用0字節(jié)值在末尾補(bǔ)足,使其能夠被3整除梨睁,然后再進(jìn)行base64的編碼。在編碼后的base64文本后加上一個(gè)或兩個(gè)'='號娜饵,代表補(bǔ)足的字節(jié)數(shù)坡贺。也就是說,當(dāng)最后剩余一個(gè)八位字節(jié)(一個(gè)byte)時(shí)箱舞,最后一個(gè)6位的base64字節(jié)塊有四位是0值遍坟,最后附加上兩個(gè)等號;如果最后剩余兩個(gè)八位字節(jié)(2個(gè)byte)時(shí)晴股,最后一個(gè)6位的base字節(jié)塊有兩位是0值愿伴,最后附加一個(gè)等號。 參考下表:
base64編碼處理.png
'A'base64編碼結(jié)果:'QQ =='
'BC'base64編碼結(jié)果:QKM=
喜歡的關(guān)注我吧电湘!