我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文描述一下zlib库里面的几个加密(压缩)解密(解压缩)函数。实际上是压缩解压缩的过程,但是,因为结果对于大家来说,是个天书,所以也算加密解密的过程。本文共涉及三种压缩的方式:deflatedeflateRawgzip

苏南大叔:nodejs代码,如何利用zlib压缩和还原一段文字? - 压缩并还原
nodejs代码,如何利用zlib压缩和还原一段文字?(图1-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述利用nodezlib模块,对文字进行压缩和解压缩。测试环境:win10node@16.14.2

deflategzip

这里大家也就别抬杠了,根据公开资料显示,deflate是一种算法,它的格式是zlibgzip也是一种格式,目前它默认且唯一的算法就是deflate。也就是说,deflatezlibgzip,目前来说,几乎是等同的。虽然名字不同,zlibgzip都是对deflate算法的一个包装。

值得一提的是:在大家浏览网页的时候,浏览器都在无时不刻的发送这样的request header头信息:

accept-encoding: gzip, deflate, br

然后,服务器端返回格式gzipresponse header数据,:

content-encoding: gzip

这个也算是标配,在SEO中算加分项,服务器端是看着客户端说接收“gzip, deflate”编码后,才会发出gzip格式的数据的。否则会直接显示没有压缩过的代码(虽然对于大家来说,这个过程是无感的)。至于浏览器头里面的br是啥意思,目前未知。

导入类库

引入代码:

var zlib = require("zlib");
var input = '苏南大叔的博客叫做程序如此灵动';

值得特殊说明的是:这些加密解密过程,都是异步的。也就是说,本文中的代码,并不保证执行顺序。

deflate加密,inflateunzip解密

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());
      }
    });
  }
});

相关链接

总结

加密方法加密结果显示附加函数解密方法解密结果显示附加函数
deflatebuffer.toString('base64')inflate / unzipbuffer.toString()
deflateRawbuffer.toString('base64')inflateRawbuffer.toString()
gzipbuffer.toString('base64')gunzip / unzipbuffer.toString()

链接自取:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   node    gzip