【问题标题】:Encrypt and decrypt video file in JavaScript using CryptoJS使用 CryptoJS 在 JavaScript 中加密和解密视频文件
【发布时间】:2018-05-24 18:45:59
【问题描述】:

我想知道如何使用 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);

【问题讨论】:

    标签: javascript encryption html5-video aes cryptojs


    【解决方案1】:

    您不能将二进制数据转换为字符串,因为它本质上不是字符串...在您的代码中的任何位置 toString 都是错误的。

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

    【讨论】:

    • 我应该使用instanceOfFileReader.readAsBinaryString(blob);的方法来读取文件吗?如果我传递给加密函数,任何不是字符串的东西都会给我一个错误。
    • 我想我还没有完全理解你说我应该怎么做,因为直接传递文件返回错误。我在问题中添加了更新的代码,而不是传递一个字符串,而是传递一个 WordArray。代码还是不行。
    • 知道怎么做,即使是另一个库?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2017-05-04
    相关资源
    最近更新 更多