zlib无法解压缩gzip数据

时间:2018-09-08 06:18:22

标签: node.js gzip zlib

我正在使用zlib节点模块来压缩数据,并使用crypto模块对其进行加密,然后将其保存到文件中。读写文件以及加密和解密数据都可以正常工作,但是无论如何,当我尝试使用zlib.unzip解压缩数据时,都会返回以下错误。

Error: incorrect header check at Zlib.zlibOnError [as onerror] (zlib.js:153:17) errno: -3, code:'Z_DATA_ERROR'

我已经检查了从文件读取的数据是否与写入的数据相同(是这种情况)。改为使用zlib.gunzip绕过zlib的自动标头检测不会更改任何内容。

function encrypt(data, enc) {
  zlib.gzip(data, (err, compressed) => {
    let cipher = crypto.createCipheriv(enc.algorithm, enc.key, enc.iv);
    compressed = cipher.update(compressed.toString(), 'utf8', 'base64') + cipher.final('base64');
    fs.writeFile('passwords', compressed, (err) => {
      if (err) throw err;
    });
  });
}


function decrypt(enc) {
  fs.readFile('passwords', (err, data) => {
    if (err) throw err;
    let decipher = crypto.createDecipheriv(enc.algorithm, enc.key, enc.iv);
    data = decipher.update(data.toString(), 'base64', 'utf8') + decipher.final('utf8');
    zlib.unzip(data, (err, uncompressed) => { // THIS LINE SEEMS TO THROW THE ERROR
      if (err) console.warn(err);
      console.log(uncompressed);
    });
  });
}

更新: 我一直在尝试进一步研究这个问题,因为它仍然出现,而且我真的很想将压缩作为功能。

但是,到目前为止,我发现,显然只有在结合使用zlibcrypto时,错误才会发生,两者都可以正常工作。

显然,zlib遇到了crypto修改压缩数据的问题,因为切换它们的顺序似乎可以解决问题。但是crypto压缩或多或少的随机数据压缩后返回,没有多大意义。

也许有人对此有想法?

更新2: 我再次深入研究,发现解密后的数据不适合加密后的数据。但是,它已被正确解密,crypto不会引发任何错误。这可能就是为什么zlib无法解压缩数据的原因。

0 个答案:

没有答案