手机版

base64节点学习编解码

时间:2021-09-14 来源:互联网 编辑:宝哥软件园 浏览:

一、Base64代码的由来

为什么会有Base64编码?因为有些网络传输通道不支持全部字节,比如传统邮件只支持可见字符的传输,ASCII码这样的控制字符是无法通过邮件传输的。因此,应用受到很大限制。例如,图片二进制流的每个字节不能都是可见字符,因此无法传输。最好的方法是在不改变传统协议的情况下,制定一个支持二进制文件传输的扩展方案。这个问题通过使用可打印字符和不可打印字符来解决。Base64编码应运而生,它是一种基于64个可打印字符的二进制数据表示方法。

二.Base64编码原理

查看Base64的索引表,选择64个可打印字符作为“a-z,A-Z,0-9,/”。数值代表字符的索引,由标准的Base64协议规定,不能更改。所有64个字符都可以用6位来表示,一个字节有8位,剩下的两位都浪费了,所以要牺牲一些空间。这里需要理解的是,一个Base64字符是8位,但有效部分右边只有6位,左边两位始终为0。

那么如何用6个有效位来表示8位繁体字呢?8和6的最小公倍数是24,也就是说3个传统字节可以用4个Base64字符表示,这样有效位数相同,弥补了Base64只有6个有效位的不足,多了1/3字节。也可以说两个Base64字符也可以代表一个传统字符,但采用最少公倍数的方案其实是最不浪费的。结合下图更容易理解。人是三个字符,总共24个有效位,所以我们要用4个Base64字符组成24个有效位。红色方框表示对应的Base64,六个有效位转换为对应的索引值,然后对应Base64字符表。发现“Man”对应的Base64字符为“TWFU”。说到这里,有一个原理我不知道你有没有发现。转换为Base64的最小单位是三个字节。对于字符串,它总是三个字节和三个字节,对应于四个字节的Base64。当这一点很清楚的时候,几乎是一样的。

但是在转换结束的时候,如果发现三个字节不够怎么办?愿望终于实现了。我们可以用两个base64s代表一个字符,也可以用三个Base64s代表两个字符。例如,下图中的A对应的第二个base64只有两个二进制位,所以只需用零填充最后四个。因此,a对应的Base64字符是QQ。如上所述,原则是Base64字符的最小单位是一组四个字符,所以这只是两个字符,后面应该加上两个'='。其实我们不需要'='也不需要延迟解码。我们使用“=”的原因可能是考虑到多段编码的Base64字符串不会造成混淆。可见Base64的最后一个字符串只能出现一两个'=',中间不可能出现'='。下图中字符“BC”的编码过程相同。

三、node.js普通字符串编解码:

var b=新缓冲区(' JavaScript ');var s=b . ToString(' base64 ');//SmF2YVNjcmlwdA==var b=new Buffer(' SmF2YVNjcmlwdA==',' base64 ')var s=b . tostring();//JavaScript代码,解码并转换为十六进制

var b=新缓冲区(' SmF2YVNjcmlwdA==',' base64 ')var s=b . tostring(' hex ');//4 a 617661536372697074 var b=new Buffer(' 4 a 617661536372697074 ',' hex ')var s=b . tostring(' utf8 ');//JavaScript IV。通过node.js对图片进行编码和解码

var fs=require(' fs ');//将文件数据编码为base64编码字符串的函数base64_encode(文件){ //读取二进制数据var位图=fs。readfilesync(文件);//将二进制数据转换为base64编码字符串返回新的缓冲区(位图)。toString(' base64 ');}//函数从base64编码字符串创建文件base64_decode(base64str,file) { //从base64编码字符串创建缓冲器对象,重要的是告诉构造函数该字符串是base64编码的var位图=新缓冲区(base64str,' base64 ');//将缓冲区写入文件fs.writeFileSync(文件,位图);console.log('********从base64编码字符串创建的文件* * * * * * *);}//将图像转换为base64编码的string var base64 str=base64 _ encode(' kitten。jpg’);控制台。日志(基本64字符串);//将base64字符串转换回image base64_decode(base64str,' copy。jpg’);总结

以上就是node.js之base64编码解码的全部内容,希望本文的内容对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

版权声明:base64节点学习编解码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。