我需要使用crypto-js加密和解密视频文件。我有以下代码,如下所示。该代码生成加密和解密文件,但解密文件无法播放。我还看到解密后的文件比原始文件大。
有什么问题?
const FormData = require('form-data');
var fs = require('fs');
const request = require('request');
var CryptoJS = require("crypto-js");
function aes_encrypt(str_to_encrypt){
var key = "sgftyrfacert6hjaddd4rl"; //length=22
var iv = "fgry5shghdy5ghy6sgh55h"; //length=22
key = CryptoJS.enc.Base64.parse(key);
iv = CryptoJS.enc.Base64.parse(iv);
//var encrypted = CryptoJS.AES.encrypt(str_to_encrypt, key, { iv: iv });
var encrypted = CryptoJS.AES.encrypt(str_to_encrypt,key, { iv: iv });
var encryptedString = encrypted.toString();
return encryptedString;
}
function aes_decrypt(str_to_decrypt){
var key = "sgftyrfacert6hjaddd4rl"; //length=22
var iv = "fgry5shghdy5ghy6sgh55h"; //length=22
key = CryptoJS.enc.Base64.parse(key);
iv = CryptoJS.enc.Base64.parse(iv);
//var decrypted = CryptoJS.AES.decrypt(str_to_decrypt, key, { iv: iv });
var decrypted = CryptoJS.AES.decrypt(str_to_decrypt,key, { iv: iv });
var decryptedString = decrypted.toString(CryptoJS.enc.Utf8);
return decryptedString;
}
function streamToString (stream) {
const chunks = [];
return new Promise((resolve, reject) => {
stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
stream.on('error', (err) => reject(err));
stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
})
}
async function encrypt(){
var file="video.mp4";
var infile = fs.createReadStream(file);
const result = await streamToString(infile);
var outfile = fs.createWriteStream(file+".enc");
var encrypted = aes_encrypt(result);
outfile.write(encrypted);
outfile.close();
var infile1 = fs.createReadStream(file+".enc");
const result1 = await streamToString(infile1);
var decrypted = aes_decrypt(result1);
var outfile1 = fs.createWriteStream(file+".dec");
outfile1.write(decrypted);
outfile1.close();
}
encrypt();