国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

node.js學習之base64編碼解碼

2019-11-20 08:41:32
字體:
來源:轉載
供稿:網友

一. Base64編碼由來

為什么會有Base64編碼呢?因為有些網絡傳送渠道并不支持所有的字節,例如傳統的郵件只支持可見字符的傳送,像ASCII碼的控制字符就 不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進制流的每個字節不可能全部是可見字符,所以就傳送不了。最好的方法就是在不改變傳統協議的情 況下,做一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。Base64編碼應運而生,Base64就是一種 基于64個可打印字符來表示二進制數據的表示方法。

二. Base64編碼原理

看一下Base64的索引表,字符選用了"A-Z、a-z、0-9、+、/" 64個可打印字符。數值代表字符的索引,這個是標準Base64協議規定的,不能更改。64個字符用6個bit位就可以全部表示,一個字節有8個bit 位,剩下兩個bit就浪費掉了,這樣就不得不犧牲一部分空間了。這里需要弄明白的就是一個Base64字符是8個bit,但是有效部分只有右邊的6個 bit,左邊兩個永遠是0。

那么怎么用6個有效bit來表示傳統字符的8個bit呢?8和6的最小公倍數 是24,也就是說3個傳統字節可以由4個Base64字符來表示,保證有效位數是一樣的,這樣就多了1/3的字節數來彌補Base64只有6個有效bit 的不足。你也可以說用兩個Base64字符也能表示一個傳統字符,但是采用最小公倍數的方案其實是最減少浪費的。結合下邊的圖比較容易理解。Man是三個 字符,一共24個有效bit,只好用4個Base64字符來湊齊24個有效位。紅框表示的是對應的Base64,6個有效位轉化成相應的索引值再對應 Base64字符表,查出"Man"對應的Base64字符是"TWFU"。說到這里有個原則不知道你發現了沒有,要轉換成Base64的最小單位就是三個字節,對一個字符串來說每次都是三個字節三個字節的轉換,對應的是Base64的四個字節。這個搞清楚了其實就差不多了。

但是轉換到最后你發現不夠三個字節了怎么辦呢?愿望終于實現了,我們可以用兩 個Base64來表示一個字符或用三個Base64表示兩個字符,像下圖的A對應的第二個Base64的二進制位只有兩個,把后邊的四個補0就是了。所以 A對應的Base64字符就是QQ。上邊已經說過了,原則是Base64字符的最小單位是四個字符一組,那這才兩個字 符,后邊補兩個"="吧。其實不用"="也不耽誤解碼,之所以用"=",可能是考慮到多段編碼后的Base64字符串拼起來也不會引起混淆。由此可見 Base64字符串只可能最后出現一個或兩個"=",中間是不可能出現"="的。下圖中字符"BC"的編碼過程也是一樣的。

三、node.js普通字符串編碼解碼:

var b = new Buffer('JavaScript');var s = b.toString('base64');// SmF2YVNjcmlwdA==var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')var s = b.toString();// JavaScript

編碼解碼并轉成hex

var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')var s = b.toString('hex');// 4a617661536372697074var b = new Buffer('4a617661536372697074', 'hex')var s = b.toString('utf8');// JavaScript

四、node.js編碼解碼圖片

var fs = require('fs');// function to encode file data to base64 encoded stringfunction base64_encode(file) {  // read binary data  var bitmap = fs.readFileSync(file);  // convert binary data to base64 encoded string  return new Buffer(bitmap).toString('base64');}// function to create file from base64 encoded stringfunction base64_decode(base64str, file) {  // create buffer object from base64 encoded string, it is important to tell the constructor that the string is base64 encoded  var bitmap = new Buffer(base64str, 'base64');  // write buffer to file  fs.writeFileSync(file, bitmap);  console.log('******** File created from base64 encoded string ********');}// convert image to base64 encoded stringvar base64str = base64_encode('kitten.jpg');console.log(base64str);// convert base64 string back to image base64_decode(base64str, 'copy.jpg');

總結

以上就是node.js之base64編碼解碼的全部內容,希望本文的內容對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 樟树市| 盐亭县| 阜新| 台湾省| 庆城县| 陇西县| 乌什县| 隆回县| 庆元县| 新闻| 高陵县| 营山县| 泽州县| 建阳市| 丰台区| 尉犁县| 文水县| 北票市| 保康县| 清涧县| 高邑县| 丹巴县| 平度市| 永泰县| 甘德县| 文山县| 肥乡县| 山阳县| 兴宁市| 普安县| 台安县| 平安县| 石林| 宝应县| 泾阳县| 扎赉特旗| 绥江县| 揭西县| 桃园县| 盐池县| 广宗县|