Nodejs使用crypto-js加密和解密视频文件

时间:2021-03-26 11:37:37

标签: javascript node.js cryptojs

我需要使用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();

0 个答案:

没有答案
相关问题