javascript - Nodejs使用crypto-js加密和解密视频文件
问题描述
我需要使用 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();
解决方案
推荐阅读
- android - Linkedin 如何在不通过浏览器的情况下如此快速地从电子邮件重定向到应用程序?
- java - selenium 自动化 - testng 框架
- python - Fastening the data extraction
- python - 如何在 python 中使用 tkinter 按钮在单击时更改 Canvas 背景颜色
- ubuntu - How to install ksnapshot on Ubuntu 18.04+?
- c# - Parameter count mismatch trying to execute login method
- python - Calculating tvalue using numpy
- asp.net-core-2.0 - How can I update the multiple records using PUT in Web Api in one Call?
- r - 重新缩放没有均值、标准差、最小值和最大值的向量
- sql-server - Conditional AND in select statement SQL Server