JavaScript(js)加密解密视频文件

加密文件:

1、注意crypto的方法,createCipheriv中的参数algorithm必须为"aes-128-cbc"

2、encryptStream.setAutoPadding(true);

3、文件可压缩,也可不压缩gzip

var crypto = require("crypto"); //用来加密
var fs = require("fs");
var zlib = require("zlib"); //用来压缩
const path = require("path");

let myfiles = [];
const courseName = "xx060101jzlgcnl";
const resDir =
    __dirname + "/dist_electron/static/t/" + courseName + "/mp4/fhd";
const desDir =
    __dirname + "/dist_electron/static/t/" + courseName + "/mp4/fhd";

console.time("mp4Encrypt");
const files = fs.readdirSync(resDir);
for (let i = 0; i < files.length; i++) {
    const file = files[i];
    const states = fs.statSync(resDir + "/" + file);
    const extname = path.extname(file);
    if (
        !states.isDirectory() &&
        (extname == ".m3u8" || extname == ".ts" || extname == ".mp4")
    ) {
        myfiles.push(file);
    }
}
walk(resDir, desDir, courseName, 0, myfiles);
console.timeEnd("mp4Encrypt");

function walk(resDir, desDir, courseName, i, files) {
    const consts = {
        cryptkey: "填写自己的cryptkey",
        iv: "填写自己的iv",
    };
    var encryptStream = crypto.createCipheriv(
        "aes-128-cbc",
        consts.cryptkey,
        consts.iv
    );
    encryptStream.setAutoPadding(true);
    var gzip = zlib.createGzip();

    const file = files[i];
    const states = fs.statSync(resDir + "/" + file);
    console.log(resDir + "/" + file);
    const extname = path.extname(file);
    if (
        !states.isDirectory() &&
        (extname == ".m3u8" || extname == ".ts" || extname == ".mp4")
    ) {
        
        var readStream = fs.createReadStream(resDir + "/" + file);
        var writeStream = fs.createWriteStream(desDir + "/" + file + ".kd");

        readStream //读取
            .pipe(encryptStream) //加密
            .pipe(gzip) //压缩
            .pipe(writeStream) //写入
            .on("finish", function () {
                //写入结束的回调
                console.log("done");
                readStream.close();
                i++;
                if (i < files.length) {
                    walk(resDir, desDir, courseName, i, files);
                }
            });
    }
}

解密视频文件:

1、注意解密方法 createDecipheriv

2、修改cryptkey 和 iv

var crypto = require("crypto"); //用来加密
var fs = require("fs");
var zlib = require("zlib"); //用来压缩
const path = require("path");

let myfiles = [];
const courseName = "xx060101jzlgcnl";
const resDir =
    __dirname + "/dist_electron/static/t/" + courseName + "/mp4/fhd";
const desDir =
    __dirname + "/dist_electron/static/t/" + courseName + "/mp4/fhd";


console.time("mp4Dencrypt");
const files = fs.readdirSync(resDir);
if (files.length > 0) {
    for (let i = 0; i < files.length; i++) {
        const file = files[i];
        const states = fs.statSync(resDir + "/" + file);
        const extname = path.extname(file);
        if (!states.isDirectory() && extname == ".kd") {
            myfiles.push(file);
        }
    }
    if (myfiles.length > 0) {
        walk(resDir, desDir, courseName, 0, myfiles);
    }
}
console.timeEnd("mp4Dencrypt");

function walk(resDir, desDir, courseName, i, files) {
    const consts = {
        cryptkey: "填写自己的cryptkey",
        iv: "填写自己的iv",
    };
    
    var decryptStream = crypto.createDecipheriv(
        "aes-128-cbc",
        consts.cryptkey,
        consts.iv
    );
    decryptStream.setAutoPadding(true);

    var gzip = zlib.createGunzip(); //解压

    const file = files[i];
    const states = fs.statSync(resDir + "/" + file);
    const extname = path.extname(file);
    if (!states.isDirectory()) {
        console.log(resDir + "/" + file);
        //*

        var readStream = fs.createReadStream(resDir + "/" + file);
        var writeStream = fs.createWriteStream(
            desDir + "/" + file.replace(".kd", "")
        );
        readStream //读取
            .pipe(gzip) //解压
            .pipe(decryptStream) //解密
            .pipe(writeStream) //将解密
            .on("finish", function () {
                //解压后的回调
                console.log("done");
                i++;
                if (i < files.length) {
                    walk(resDir, desDir, courseName, i, files);
                }
            });

        //*/
    }
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值