nodejs代码,如何利用zlib压缩和还原一段文字?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文描述一下zlib
库里面的几个加密(压缩)解密(解压缩)函数。实际上是压缩解压缩的过程,但是,因为结果对于大家来说,是个天书,所以也算加密解密的过程。本文共涉及三种压缩的方式:deflate
、deflateRaw
、gzip
。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述利用node
的zlib
模块,对文字进行压缩和解压缩。测试环境:win10
,node@16.14.2
。
deflate
和gzip
这里大家也就别抬杠了,根据公开资料显示,deflate
是一种算法,它的格式是zlib
。gzip
也是一种格式,目前它默认且唯一的算法就是deflate
。也就是说,deflate
、zlib
、gzip
,目前来说,几乎是等同的。虽然名字不同,zlib
和gzip
都是对deflate
算法的一个包装。
值得一提的是:在大家浏览网页的时候,浏览器都在无时不刻的发送这样的request header
头信息:
accept-encoding: gzip, deflate, br
然后,服务器端返回格式gzip
的response header
数据,:
content-encoding: gzip
这个也算是标配,在SEO
中算加分项,服务器端是看着客户端说接收“gzip, deflate”编码后,才会发出gzip
格式的数据的。否则会直接显示没有压缩过的代码(虽然对于大家来说,这个过程是无感的)。至于浏览器头里面的br
是啥意思,目前未知。
导入类库
引入代码:
var zlib = require("zlib");
var input = '苏南大叔的博客叫做程序如此灵动';
值得特殊说明的是:这些加密解密过程,都是异步的。也就是说,本文中的代码,并不保证执行顺序。
deflate
加密,inflate
和unzip
解密
zlib.deflate(input, function(err, buffer) {
if (!err) {
console.log("deflate (%s): ", buffer.length, buffer.toString('base64'));
zlib.inflate(buffer, function(err, buffer) {
if (!err) {
console.log("inflate (%s): ", buffer.length, buffer.toString());
}
});
zlib.unzip(buffer, function(err, buffer) {
if (!err) {
console.log("unzip deflate (%s): ", buffer.length, buffer.toString());
}
});
}
});
deflateRaw
加密,inflateRaw
解密
zlib.deflateRaw(input, function(err, buffer) {
if (!err) {
console.log("deflateRaw (%s): ", buffer.length, buffer.toString('base64'));
zlib.inflateRaw(buffer, function(err, buffer) {
if (!err) {
console.log("inflateRaw (%s): ", buffer.length, buffer.toString());
}
});
}
});
gzip
加密,gunzip
/unzip
解密
zlib.gzip(input, function(err, buffer) {
if (!err) {
console.log("gzip (%s): ", buffer.length, buffer.toString('base64'));
zlib.gunzip(buffer, function(err, buffer) {
if (!err) {
console.log("gunzip (%s): ", buffer.length, buffer.toString());
}
});
zlib.unzip(buffer, function(err, buffer) {
if (!err) {
console.log("unzip gzip (%s): ", buffer.length, buffer.toString());
}
});
}
});
相关链接
总结
加密方法 | 加密结果显示附加函数 | 解密方法 | 解密结果显示附加函数 |
---|---|---|---|
deflate | buffer.toString('base64') | inflate / unzip | buffer.toString() |
deflateRaw | buffer.toString('base64') | inflateRaw | buffer.toString() |
gzip | buffer.toString('base64') | gunzip / unzip | buffer.toString() |
链接自取:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。