使用CryptoJS

时间:2018-05-23 15:22:06

标签: javascript encryption html5-video aes cryptojs

我想知道如何使用JavaScript加密和解密视频文件。我曾尝试使用Crypto-js库,但在解密之后我无法重现它。在下面的代码中,我尝试将输入视频加密,并在解密后从HTML播放并下载文件:

 input.on('change', function (e) {
      let file = e.target.files[0];
      let reader = new FileReader();
      reader.onload = function () {
        let fileLeida = reader.result;
        let videoEncriptado = CryptoJS.AES.encrypt(fileLeida, getCookie('clave')).toString();
        let videoDesencriptado = CryptoJS.AES.decrypt(videoEncriptado, getCookie('clave')).toString(CryptoJS.enc.Utf8);
        var videoNode = document.getElementsByTagName('video')[0];
        let blob = new Blob([videoDesencriptado], {type: "video/mp4"});
        let url = URL.createObjectURL(blob);
        let element = document.createElement('a');
        videoNode.setAttribute('href', url);
        videoNode.play();
        element.setAttribute('href', url);
        element.setAttribute('download', 'Blurred Bokeh Video 2.mp4');
        element.style.display = 'none';
        document.body.appendChild(element);
        element.click();
        document.body.removeChild(element);

      };
      reader.readAsText(file);
});

提前谢谢你。

代码已更新但仍无效:

let file = e.target.files[0];
      let reader = new FileReader();
      reader.onload = function () {
        var fileLeida = CryptoJS.lib.WordArray.create(reader.result);
        console.log(fileLeida);
        let videoEncriptado = CryptoJS.AES.encrypt(fileLeida, getCookie('clave'));
        let videoDesencriptado = CryptoJS.AES.decrypt(videoEncriptado, getCookie('clave'));
        console.log(videoDesencriptado);
        var videoNode = document.getElementsByTagName('video')[0];
        let blob = new Blob([videoDesencriptado], {type: "video/mp4"});
        let url = URL.createObjectURL(blob);
        let element = document.createElement('a');
        videoNode.setAttribute('href', url);
        videoNode.play();
        element.setAttribute('href', url);
        element.setAttribute('download', 'Blurred Bokeh Video 2.mp4');
        element.style.display = 'none';
        document.body.appendChild(element);
        element.click();
        document.body.removeChild(element);

      };
    reader.readAsArrayBuffer(file);

1 个答案:

答案 0 :(得分:0)

您无法将二进制数据转换为字符串,因为它本身不是字符串...您的代码中有toString的任何地方都是错误的。

您的视频文件是视频格式的二进制数据。不是UTF8格式。为什么你试图用它来构建一个字符串超出了我的范围。