Итак, у меня есть приложение, которое загружает папку zip с кучей аудиофайлов в ней. Я хочу зашифровать этот zip-файл при загрузке, а затем иметь возможность расшифровать zip-файл в каком-то другом месте приложения, чтобы его можно было извлечь. У меня есть basi c logi c для шифрования и дешифрования с использованием пакета Node's Crypto и AES-256 с режимом CTR, но я не могу получить пригодный для использования zip-файл в конце процесса.
Вот мой запрос http.get, который я использую для загрузки zip-файла
http.get(fileURI).on('response', function(res) {
res.on('data', function(chunk) {
let encryptedChunk = encrypt(chunk);
writeStream.write(encryptedChunk);
}).on('end', function() {
writeStream.end();
})
})
Так что запрос get шифрует каждый кусок данных при его загрузке и отправляет его в writeStream, который открыт для указанного c файл, а затем запись заканчивается, когда загрузка zip завершена. Это похоже на правильное шифрование, в том смысле, что я не могу открыть zip-файл (Windows не может открыть всплывающее окно с ошибкой).
Моя функция шифрования очень базовая c, которая называется в запросе http выглядит так:
function encrypt(data) {
try {
let cipher = crypto.createCipher('aes-256-ctr', key); // key is a random string
let encrypted = Buffer.concat([cipher.update(new Buffer(data, "utf8")), cipher.final()]);
return encrypted;
} catch (exception) {
console.error(exception);
}
}
У меня есть функция, которая создает readStream, которая пытается расшифровать этот файл, это выглядит так:
function decryptzip() {
// assume there are a bunch of necessary filepaths up here
let readStream = fs.createReadStream(downloadedZipFilePath);
let writeStream = fs.createWriteStream(newDecryptedZipFilePath);
readStream.on('data', (chunk) => {
let decryptedChunk = decrypt(chunk);
writeStream.write(decryptedChunk); // the goal of this write stream is to have a usable zip file once it closes
}).on('finish', () => {
writeStream.end();
})
}
И тогда мой Фактическая функция дешифрования выглядит следующим образом:
function decrypt(data) {
try {
let decipher = crypto.createDecipher('aes-256-ctr', key); // same key used in encrypt
let decrypted = Buffer.concat([decipher.update(data), decipher.final()]);
return decrypted;
} catch (exception) {
console.error(exception);
}
}
Обе эти функции шифрования и дешифрования работают с обычным текстом, но «расшифрованный» zip-файл все еще непригоден и дает мне сообщение «Windows не может открыть папку». ошибка ", когда я пытаюсь увидеть, что внутри. Я действительно понятия не имею, что я делаю с точки зрения этого материала, поэтому любая помощь будет оценена, я довольно потерян, смеется.