亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript中關于base64的一些事

2024-05-06 16:50:34
字體:
來源:轉載
供稿:網友

base64 其實是一種編碼轉換方式, 將 ASCII 字符轉換成普通文本, 是網絡上最常見的用于傳輸8Bit字節代碼的編碼方式之一。

base64 由字母 a-z 、 A-Z 、 0-9 以及 + 和 / , 再加上作為墊字的 = , 一共65字符組成一個基本字符集, 其他所有字符都可以根據一定規則, 轉換成該字符集中的字符。

abcde => YWJjZGU= ABCDE => QUJDREU=

在日常開發中, 最常見的便是將 blob 和 base64 之間相互轉換.

// blob to base64function blobTobase64(blob) { const fileReader = new FileReader() let base64 = '' fileReader.onload = () => { base64 = fileReader.result // 讀取base64 } fileReader.readAsDataURL(blob) // 讀取blob}// base64 to blobfunction dataURItoBlob(dataURI) { var mimeString = dataURI .split(',')[0] .split(':')[1] .split(';')[0] // mime類型 var byteString = atob(dataURI.split(',')[1]) //base64 解碼 var arrayBuffer = new ArrayBuffer(byteString.length) //創建ArrayBuffer var intArray = new Uint8Array(arrayBuffer) //創建視圖 for (var i = 0; i < byteString.length; i++) { intArray[i] = byteString.charCodeAt(i) } return new Blob([intArray], { type: mimeString }) // 轉成 blob}

編碼和解碼

瀏覽器

最新的瀏覽器自帶了兩個方法用于 base64 的編碼和解碼

分別是 at

ob 和 btoa

  • atob:將 base64 轉成 8bit 字節碼
  • btoa:將 8bit 字節碼轉成 base64

對于舊版瀏覽器, 可以使用 js-base64

Node

目前 node 中還不支持使用 atob 和 btoa ,但是可以通過 Buffer 來實現,參考文檔

 

if (typeof btoa === 'undefined') { global.btoa = function (str) { return Buffer.from(str).toString('base64'); };}if (typeof atob === 'undefined') { global.atob = function (b64Encoded) { return Buffer.frome(b64Encoded, 'base64').toString(); };}

轉換方式

base64編碼方式對于中文是不適用的, 因為中文對應多個字節, 因此可以先使用 encodeURIComponent 編碼后再進行 base64 編碼.

源碼

編碼

每三個字節作為一組,每個字節8bit, 一共是24個二進制位。

'ABCD'["ABC", "D"] // 每三字節做一組['01000001010000100100001', '01000100'] // 轉成8bit

將每組的24個二進制位再細分為四組,每組有6個二進制位, 此時為二維數組。

[['010000', '010100', '001001', '000011'], ['010001', '00']]

  • 二個字節的情況:將這二個字節的一共16個二進制位, 按照上面的規則, 轉成三組, 那么最后一項只有4位,則在后面加兩個0, 補夠6位, 并在第三步對應位置加上墊字符 = 。
  • 一個字節的情況:將這一個字節的8個二進制位,按照上面的規則轉成二組, 那么最后一項只有2位, 則在后面加上四個0, 并在第三步對應位置加上兩個墊字符 = 。
  • 簡單說就是, 缺多少位就在后面補多少個0, 直到滿6位。

[['010000', '010100', '001001', '000011'], ['010001', '000000']]

在每組前面加兩個00,擴展成32個二進制位,即四個字節。

規則是這么說, 但這一步我覺得可以忽略, 因為 00101010 和 101010 是一樣的

將每組對應的二進制轉成十進制, 在 base64char 字符集中找到對應的字符。

[["Q", "U", "J", "D"], ["R", "A"]]

每一組都最終都應該轉成四個字符

如果不足四個字符, 說明明文中并不足3字節, 因此需要補上墊字符 = , 補夠四個字符

[["Q", "U", "J", "D"], ["R", "A", "=", "="]]

將最后的結果連接成字符串, 則為最終編碼結果。

'ABCD' > 'QUJDRA=='

根據編碼方式來看, 每3個字節將會被編碼成四個字符, 如果不足3個字節, 則補上墊字符 = , 缺幾個就補幾個。

btoa('A') // "QQ=="btoa('AB') // "QUI="btoa('ABC') // "QUJD"btoa('ABCD') // "QUJDRA=="

解碼

解碼步驟就是跟編碼步驟反過來

  1. 每四個字節分為一組。
  2. 將每組的中除了墊字符 = 外的字符, 在 base64char 字符集中找到所在下標。
  3. 將十進制下標轉成二進制, 如果不夠6位(一定不會超過6位), 則在前面補 0 。
  • 如果遇到墊字符 = , 說明其明文不足3字節, 則根據墊字符 = 的數量, 在該組最后一項中去掉對應個數的 0
  • 一個墊字符, 則去掉兩個 0
  • 兩個墊字符, 則去掉四個 0
  1. 將每組中的二進制字符串連接,此時字符串長度一定是8的倍數,然后每8位分割成一個字節。
  2. 通過 String.fromCharCode 將二進制轉成字符, 然后拼接
  3. 將各個字符連接, 為最終解碼結果。

題外-進制轉換

  • parseInt(str, radix): 根據radix可以將字符串轉成十進制
  • initValue.toString(radix): 將initValue轉成其他進制
// n進制轉十進制parseInt('1000', 2) // 8parseInt('1000', 16) // 4096// 進制間轉換(10).toString(2) // "1010", 10進制轉2進制(0xff).toString(2) // "11111111", 16進制轉2進制

總結

 以上所述是小編給大家介紹的JavaScript中關于base64的一些事,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品免费| 亚洲变态欧美另类捆绑| 久久亚洲欧美日韩精品专区| 国产主播在线一区| 午夜精品www| 欧美三级欧美成人高清www| 久久久久久久一区二区三区| 国产成人jvid在线播放| 亚洲美女av网站| 亚洲护士老师的毛茸茸最新章节| 日本久久久a级免费| 欧美洲成人男女午夜视频| 97精品久久久中文字幕免费| 欧美视频专区一二在线观看| 欧美激情精品久久久久| 91精品国产91久久久| 亚洲欧美激情精品一区二区| 欧美日韩中文字幕在线| 538国产精品视频一区二区| 国产精品一区二区三区免费视频| 国产亚洲激情在线| 亚洲精品一区二区久| 亚洲xxx自由成熟| 青草青草久热精品视频在线网站| 精品一区二区三区四区| 高潮白浆女日韩av免费看| 51色欧美片视频在线观看| 91免费国产视频| 日韩成人高清在线| 国产日韩专区在线| 亚洲国产精品专区久久| 欧美性感美女h网站在线观看免费| 久久久噜久噜久久综合| 91在线高清视频| 亚洲a∨日韩av高清在线观看| 欧美在线精品免播放器视频| 国产精品一区二区av影院萌芽| 欧美xxxx18国产| 国产原创欧美精品| 亚洲女在线观看| 国产欧美日韩高清| 亚洲免费中文字幕| 国产又爽又黄的激情精品视频| 欧美日韩性生活视频| 国产经典一区二区| 色妞一区二区三区| 久久精品人人做人人爽| 精品久久久免费| 精品久久久久久久久久久久久久| 久久手机免费视频| 国产99视频精品免视看7| 国产精品一香蕉国产线看观看| 亚洲春色另类小说| 九九热99久久久国产盗摄| 亚洲欧美三级伦理| 国产69精品99久久久久久宅男| 亚洲天堂男人天堂| 久久97精品久久久久久久不卡| 欧美韩国理论所午夜片917电影| 午夜精品www| 欧美极品少妇xxxxⅹ裸体艺术| 日韩亚洲成人av在线| 国产精品精品视频一区二区三区| 亚洲精品丝袜日韩| 亚洲欧美制服综合另类| 亚洲无亚洲人成网站77777| 国产精品白嫩美女在线观看| 国产一区二区香蕉| 大量国产精品视频| 91色在线视频| 性欧美暴力猛交69hd| 欧美在线精品免播放器视频| 精品亚洲一区二区三区四区五区| 欧美二区乱c黑人| 久久精品在线播放| 久久人人爽人人爽人人片av高清| xxxxxxxxx欧美| 亚洲欧美日本精品| 日韩av在线精品| 亚洲免费精彩视频| 日韩精品免费在线视频观看| 精品亚洲一区二区三区四区五区| 久久精品久久久久| 国产日韩中文字幕在线| 久久成人综合视频| 精品国产自在精品国产浪潮| 亚洲精品在线看| 成人黄色片网站| 黑人巨大精品欧美一区二区一视频| 日韩精品亚洲视频| 97超碰蝌蚪网人人做人人爽| 亚洲直播在线一区| 亚洲美女性生活视频| 午夜精品一区二区三区在线视频| 久久色精品视频| 亚洲视频欧洲视频| 国产精品久久一| 亚洲人成欧美中文字幕| 欧美视频13p| 亚洲在线视频观看| 日韩第一页在线| 欧美老女人bb| 国产成+人+综合+亚洲欧美丁香花| 精品亚洲一区二区三区| 亚洲视频在线免费看| 国产日本欧美一区二区三区| 亚洲视频免费一区| 久久男人资源视频| 日韩在线观看免费高清| 免费不卡欧美自拍视频| 精品高清一区二区三区| 成人黄色片网站| 亚洲国产成人爱av在线播放| 亚洲欧美日韩另类| 91精品国产综合久久香蕉最新版| 国产成人精品电影| 欧美人与性动交a欧美精品| 中文字幕免费国产精品| 久久在精品线影院精品国产| 在线国产精品视频| 97精品视频在线| 国产成人91久久精品| 欧美性受xxxx黑人猛交| 51色欧美片视频在线观看| 久久av红桃一区二区小说| 亚洲日韩欧美视频一区| 久久久在线免费观看| 久久久久久久久久久成人| 国产91热爆ts人妖在线| 国产欧美日韩丝袜精品一区| 亚洲国产成人在线播放| 亚洲影影院av| 91精品国产综合久久久久久蜜臀| 中文字幕日韩有码| 亚洲精品久久久久久久久久久久久| 亚洲第一福利在线观看| 国产综合久久久久久| 91在线观看免费观看| 96精品视频在线| 国产精品女视频| 国产一区二区黑人欧美xxxx| 韩日精品中文字幕| 庆余年2免费日韩剧观看大牛| 色综合久久中文字幕综合网小说| 成人激情电影一区二区| 国产区亚洲区欧美区| 欧美丰满少妇xxxxx做受| 亚洲色图25p| 一区二区欧美久久| 欧美精品久久久久久久| 亚洲影视九九影院在线观看| 国产精品中文在线| 色综合久久中文字幕综合网小说| 日韩一区二区欧美| 亚洲美女福利视频网站| 尤物yw午夜国产精品视频明星| 国产精品久久久久久av福利| 久久久亚洲国产| 91欧美精品成人综合在线观看| 欧美一区二区三区免费视| 亚洲人成在线播放| 亚洲精品美女久久久久| 国产欧美日韩丝袜精品一区| 国产精品久久久久久久久久久久|