如何使用AES128位进行视频解密

要实现AES128位加解密,可以使用JavaScript的crypto-js库。以下是一个简单的示例:

 HTML代码:

<video controlsList="nodownload" controls></video>

首先,需要安装crypto-js库:

npm install crypto-js

然后,可以使用以下代码进行AES128加解密: 

import CryptoJS from 'crypto-js';const secretKey = 'your-secret-key'; // 替换为你的 AES 密钥
const iv = 'your-iv';   // 替换为你的 AES IV
const videoSourceUrl = 'your-video-url';   // 替换为你的视频的url,即video的src/*** * @param {*} iv AES IV* @param {*} key AES 密钥* @param {*} url 视频的url* @param {*} start 需要请求的视频段的起始位置* @param {*} end 需要请求的视频段的结束位置* @returns 解密后的视频*/
const fetchAndDecryptSegment=async (iv,key,url, start, end='')=>{// 调用后端接口获取加密的视频流const response = await fetch(url, {headers: {'Range': `bytes=${start}-${end}`}});const encryptedData = await response.arrayBuffer(); // 将获取到的加密的视频流转为Buffer类型const encryptedWordArray = CryptoJS.lib.WordArray.create(encryptedData);// 将Buffer类型的视频流转为WordArray类型// 解密视频流const decrypted = CryptoJS.AES.decrypt({ciphertext: encryptedWordArray},CryptoJS.enc.Utf8.parse(key),{iv: CryptoJS.enc.Utf8.parse(iv),mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,});// 对解密后的视频流进行编码const uint8Array = new Uint8Array(decrypted.sigBytes);for (let i = 0; i < decrypted.sigBytes; i++) {uint8Array[i] = (decrypted.words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;}return uint8Array;
}const loadVideo=async ()=>{// 获取解密后的视频流,start 传0,end 不传,表示加载完整视频const decryptedData=await fetchAndDecryptSegment(iv,secretKey,videoSourceUrl,0)// 将解密后的视频流转成Blob对象const blob = new Blob([decryptedData], { type: "video/mp4" });// 创建Blob对象的临时URLconst url = URL.createObjectURL(blob);const videoElement = document.getElementsByTagName('video')[0];// 将URL赋值给video的srcvideoElement.src=url
}loadVideo()

 上述代码中,通过fetch获取视频数据,其中在 Headers 中配置了 'Range': `bytes=${start}-${end}` 是准备做视频分段加载播放的,经过调研,目前只有 fmp4 格式的视频才支持视频分段播放,所以,如果需要进行分段播放需要后端将视频转码成 fmp4 格式的视频。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库管理软件:Navicat Premium 17 中文激活版

Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Clo…

Linux基础指令目录管理001

Linux目录管理是Linux操作系统中的一项基本而重要的任务&#xff0c;涉及到创建、删除、移动、查看和修改目录结构。 操作系统&#xff1a; CentOS Stream 操作命令&#xff1a; mkdir 创建目录 [rootlocalhost ~]# mkdir 秘密 [rootlocalhost ~]# ls -lhrt 总用量 1.2M …

万字解析线控底盘技术

文章出处&#xff1a;汽车学堂Automooc 引言 在当今这个由科技驱动的时代&#xff0c;汽车电动化、智能化已成为汽车行业的热门话题。特斯拉的自动驾驶功能、蔚来的换电模式、以及比亚迪的刀片电池技术&#xff0c;这些创新不仅引领着市场趋势&#xff0c;也推动着消费者对智…

SiC晶圆市场步入价格调整期:技术革新与产能扩张共促成本降低,加速下游应用拓展

近期硅碳&#xff08;SiC&#xff09;晶圆市场传出了降价的风声&#xff0c;似乎一场价格战即将拉开序幕。那么&#xff0c;当前SiC晶圆市场的实际情况如何呢&#xff1f; 供应链中多数企业普遍认同SiC晶圆价格确实在下滑。环球晶圆董事长徐秀兰公开表示&#xff0c;全球6英寸…

深入解读 Android Hook 技术-从原理到实践

在Android开发中&#xff0c;Hook技术是一种强大的手段&#xff0c;它允许开发者拦截和修改系统或应用的行为。通过Hook&#xff0c;我们可以在事件传递的过程中插入自定义的逻辑&#xff0c;从而实现对应用行为的监控和修改。 Android 系统有自己的事件分发机制&#xff0c;…

Leetcode2028. 找出缺失的观测数据

Every day a Leetcode 题目来源&#xff1a;2028. 找出缺失的观测数据 解法1&#xff1a;模拟 统计当前 m 个元素的总和 curSum sum(rolls)&#xff0c;总共 mn 个元素和为 total (m n) * mean。 排除 2 种情况&#xff1a; total - curSum > 6 * n&#xff1a;n 个…

链表(2)反转链表

题目描述 反转一个单链表。&#xff08;题目来源&#xff09; 思路一 其实&#xff0c;反转一个单向链表&#xff0c;我们可以看成是将链表中的每个结点的指向反向&#xff08;即从后一个结点指向前一个结点&#xff09;。 我们在考虑情况的时候&#xff0c;还是可以先考虑一般…

【基础计算机网络】应用层

一、网络应用模型 1.1 客户/服务器模型 1.1.1 工作流程 服务器处于接收请求的状态&#xff0c;客户机发出服务请求&#xff0c;并等待接收结果&#xff0c;服务器收到请求后&#xff0c;分析请求&#xff0c;进行必要的处理&#xff0c;得到结果并发送给客户机客户程序必须知…

变种水仙花

变种水仙花 题干要求&#xff1a; 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆分后的乘积之和等于…

Ollama 本地大模型框架

该篇教程主要讲解*Ollama的安装和简单使用* Ollama&#xff1a; 在本地启动并运行大型语言模型。 主要流程目录&#xff1a; 1.安装 2.使用 2.1.下载模型 2.2.简单使用 2.3.中文模型 2.4.中文社区 3.总结 1.安装 创建一个容器 切换”高级视图“ 参考填写 ollama oll…

java家政上门系统源码,App端采用uniapp开发编写,可打包H5 、微信小程序、微信公众号、Android、IOS等。

家政上门系统是一种通过互联网或移动应用平台&#xff0c;为用户提供在线预约、下单、支付和评价家政服务的系统。该系统整合了家政服务资源&#xff0c;使用户能够便捷地找到合适的服务人员&#xff0c;同时也为家政服务人员提供了更多的工作机会。 本套家政上门系统源码&…

Golang | Leetcode Golang题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; func minimumTotal(triangle [][]int) int {n : len(triangle)f : make([]int, n)f[0] triangle[0][0]for i : 1; i < n; i {f[i] f[i - 1] triangle[i][i]for j : i - 1; j > 0; j-- {f[j] min(f[j - 1], f[j]) triangle[i][j]…

旅游行业:解锁收入增长的新策略!

随着科技的飞速发展和人们生活水平的提高&#xff0c;旅游行业已成为全球范围内最具活力和潜力的行业之一。然而&#xff0c;在这个充满机遇与挑战的市场中&#xff0c;如何确保收入的持续增长&#xff0c;成为每一家旅游企业都必须面对的问题。在这个背景下&#xff0c;用友BI…

虚拟现实环境下的远程教育和智能评估系统(七)

在后端代码的基础上&#xff0c;利用vue框架设计前端界面&#xff0c;至此&#xff0c;用户界面基本成型&#xff0c;后续添加其他进阶功能&#xff1b; 另&#xff0c;前后端交互相关&#xff1a; UsersVO.java package com.roncoo.education.user.feign.interfaces.vo;impor…

Llama改进之——分组查询注意力

引言 今天介绍LLAMA2模型引入的关于注意力的改进——分组查询注意力(Grouped-query attention,GQA)1。 Transformer中的多头注意力在解码阶段来说是一个性能瓶颈。多查询注意力2通过共享单个key和value头&#xff0c;同时不减少query头来提升性能。多查询注意力可能导致质量下…

易联众智能自动办理平台,AI赋能让数字政务服务“触手可及”

“城乡居民参保怎么办”“要去XX省工作了,帮我办理异地就医备案”……通过口语化的文字、语音提问,易联众智能自动办理平台的AI助理都可以准确理解对话,并依据政策文件给出详细回答,人机对话像聊天一样轻松。 近日,宁德市民王先生高兴地说:“过去办理医保业务不懂流程,容易走弯…

Vue常用自定义指令、纪录篇

文章目录 一、元素尺寸发生变化时二、点击元素外自定义指令三、元素拖拽自定义指令四、防抖自定义指令五、节流自定义指令六、权限判断自定义指令 一、元素尺寸发生变化时 使用场景&#xff1a; 当元素的尺寸发生变化时需要去适配一些元素时。 或者在元素尺寸发生变化时要去适配…

C# 命名空间和 using 指令详解

在C#编程中&#xff0c;命名空间&#xff08;Namespaces&#xff09;用于组织代码元素&#xff0c;如类、接口、枚举等&#xff0c;以避免命名冲突。using 指令用于导入命名空间&#xff0c;使得代码中可以方便地引用其中的类型&#xff0c;而不必每次都使用完整的命名空间路径…

WPS/Office(Word、Excel、PPT) 自动测评方法

在各高等、中等院校的计算机类课程中,计算机基本应用技能的上机操作考试,广受重视,大为盛行。其中,office(word、excel、ppt)上机考试最为普遍。于是,实现这类Office文档操作的自动阅卷评分,很有必要。本人最近项目上刚好遇到需要解决这种自动评分的问题,所以再次记录下解决的…

TiDB学习9:Ti Cloud简介

目录 1. 为什么选择TiDB 2. 多租户 3. TiDB架构 4. 什么是TiDB Cloud 5. TiDB Cloud Provider Region 6. TiDB Cloud 入门 6.1 在浏览器中打开TiDB Cloud 6.2 创建您的账户 6.3 Developer Tier 与Dedicated Tier 6.3.1 Developer Tier 6.3.2 Dedicated Tier 6.3.2.…