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() |
链接自取: