我想知道如何使用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);
答案 0 :(得分:0)
您无法将二进制数据转换为字符串,因为它本身不是字符串...您的代码中有toString
的任何地方都是错误的。
您的视频文件是视频格式的二进制数据。不是UTF8格式。为什么你试图用它来构建一个字符串超出了我的范围。