Я использую модуль узла 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);
});
});
}
Обновление:
Я пытался исследовать эту проблему дальше, потому что она все еще появляется, и я действительно хотел бы включить сжатие в качестве функции.
Однако, что я обнаружил до сих пор, так это то, что, по-видимому, ошибка возникает только при использовании комбинаций zlib
и crypto
, оба прекрасно работают сами по себе.
Очевидно, zlib
получил проблему с crypto
, манипулирующим со сжатыми данными, потому что переключение их порядка, похоже, решает проблему каким-то образом. Но сжатие более или менее случайных данных, crypto
возвращается после шифрования, не имеет особого смысла.
Может быть, у кого-то есть идея на этот счет?
Обновление 2:
Я снова посмотрел дальше в это, и кажется, расшифрованные данные не соответствуют зашифрованным данным. Однако он расшифровывается должным образом и crypto
не выдает никаких ошибок. Вероятно, поэтому zlib
не может распаковать данные.