news 2026/4/21 8:46:05

M3U8工作原理以及key解密视频流详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
M3U8工作原理以及key解密视频流详解

文章目录

    • 一、M3U8是什么?
    • 二、HLS—M3U8的工作原理
    • 三、.m3u8文件内部是什么样的?
    • 四、简单介绍下AES-128算法
    • 五、拿到KEY后如何去解密?
    • 2.前人栽树,后人乘凉

一、M3U8是什么?

关于m3u8格式的常见误解需要澄清:m3u8并非视频格式,而是播放列表文件。所谓"m3u8解密"实际上是指对其引用的加密视频片段进行解密。

m3u8文件是指UTF-8编码格式的M3U文件,它实际上是一个包含多个URL的文本文件,每个URL指向一个音频或视频片段。这些片段可以是分段的,使得流媒体可以按需传输,从而实现自适应码率。m3u8文件通常用于流媒体传输,是HTTP
Live Streaming(HLS)技术的一部分(HTTP
LiveStreaming)是一种由苹果公司开发的流媒体传输协议,用于在互联网上实时传输音频和视频内容。它的主要特点是将整个视频流切分成短小的ts片段,并使用m3u8播放列表文件指示这些片段的顺序和位置。

不难看出,m3u8其实就是一个播放列表索引文件。

二、HLS—M3U8的工作原理

1.分段视频流
首先,视频流会被分成很多个小的.ts格式的片段。

2.生成播放列表
服务器或生成一个.m3u8文件,其中包含了所有的.ts片段的URL。

3.客户端请求和解析
客户端(浏览器)获取到.m3u8文件后,会解析其中的信息,包括每个.ts片段的持续时间、序列号、以及对应的URL。

4.片段下载和播放
客户端根据解析得到的信息,开始下载第一个.ts片段。通常,客户端会同时下载几个片段来提高播放的流畅性和缓冲性能。
当第一个.ts片段下载完毕后,客户端会开始播放这个片段。同时,客户端会继续下载后续的.ts片段,以确保连续的播放体验。

三、.m3u8文件内部是什么样的?

当我们使用文本编辑器打开.m3u8文件后,里面可能是这样的:



很明显后者多了一行

其实,它就表示这个.m3u8文件里的视频流片段被加密了。大概意思是:

使用AES-128算法加密,KEY被存放在https://example.com/enc.key里
,IV是0x7d5f0881be55ce4a3f2b8d811de877db

四、简单介绍下AES-128算法

AES-128是一种加密算法,存在很多种模式如:ECB、CBC、CTR等。 在加密视频流里常见的就是CBC模式, 这个模式的特征是使用KEY(密钥)和IV(初始化向量)去加密数据。 通常KEY和IV的长度都是128比特(bit)也就是16字节(byte)。

例如:我们使用AES-128-CBC算法加密hello csdn这句话。首先我们需要自行设置一组key和iv。
假设:key和iv分别为

5931636472715a5a35446e5441614f501234567890abcdef1234567890abcdef

可以看到加密后的数据为

有加密就会有解密

由此可见,无论是加密还是解密,数据,key,iv这三个要素缺一不可。

五、拿到KEY后如何去解密?

首先我们要搞清楚解密对象是谁?

看懂了上文HLS—M3U8的工作原理,就不用我解释,接着往下看即可。

如果仍然认为所谓的m3u8解密是对m3u8文件去解密,请回到文章开头重新阅读。

1.手动解密.ts文件
样本地址:aHR0cHM6Ly93d3cuaHVvaHV0di5uZXQv

播放任意视频,F12打开开发者工具后刷新网页,抓到m3u8请求包。

我们可以尝试下提取其中任意一条.ts的URL下载到本地进行播放

无法正常播放并提示文件类型不受支持,或文件已损坏,其实这就是典型的被加密。我们只需要找到key和iv即可对其解密。

其实在我们抓包m3u8请求的时候,key和iv就已经出现了。

#EXT-X-KEY:METHOD=AES-128,URI="enc.key",IV=0x00000000000000000000000000000000

这里已经明确地告诉了我们,iv是

0x00000000000000000000000000000000

key存放在当前目录下enc.key文件里。

而这个请求,实际上已经返回了key
实际上,这是十六进制key经过ASCII编码后得到的字符串格式的key。这种情况需要特别注意,以后会很常见。特别是key被加密时分析js文件的时候,十六进制与字符串、字节数组之间的转换知识尤为重要,
我们可以将enc.key文件下载下来使用文本编辑器打开。

现在我们可以对.ts文件进行解密了,下面是解密代码:

from Crypto.Cipher import AES from Crypto.Util.Padding import unpad defdecrypt(data,key,iv):cipher = AES.new(key,AES.MODE_CBC,iv)dec_data =unpad(cipher.decrypt(data),AES.block_size)return dec_data if __name__ =='__main__':key = bytes.fromhex('5931636472715A5A35446E5441614F50')iv = bytes.fromhex('00000000000000000000000000000000')# 读取本地加密ts文件 withopen('1.ts','rb')asf:enc_ts = f.read()# 解密ts dec_ts =decrypt(enc_ts,key,iv)# 将解密后的ts保存 withopen('dec.ts','wb')asff:ff.write(dec_ts)

代码执行完毕后打开解密后的.ts文件,已经可以正常播放。

至此,视频流的其中一个片段就解密成功了。

后续可以增加代码,实现从m3u8文件读取所有的ts,进行批量解密。然后合并成一个大的ts文件,最后再转为.mp4格式。

这里就不写详细代码了,因为有更好的解决方案,

2.前人栽树,后人乘凉

手动解密ts是为了让大家更好的了解加密视频流的解密逻辑。在实际应用中,大可不必这么麻烦。

我们可以使用一些成熟的m3u8下载工具进行解密下载。

如:逍遥一仙M3U8下载器、N_m3u8DL下载器等,这些下载器的功能都很完善,并且是免费使用的。

在此向这些无私奉献的前辈们致敬!

3.为什么有的key拿不到?有的能拿到但解密失败?
这种情况是非常常见的,原因可能有以下几点:

①.key被加密
②.key的获取方式被加密
③.m3u8、key具有使用次数限制

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:56:35

ACadSharp:解锁C处理DXF/DWG文件的完整解决方案

ACadSharp:解锁C#处理DXF/DWG文件的完整解决方案 【免费下载链接】ACadSharp C# library to read/write cad files like dxf/dwg. 项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp 在当今数字化设计时代,CAD文件处理已成为工程、建筑和制…

作者头像 李华
网站建设 2026/4/18 10:05:42

构建失败不再迷茫,Docker Buildx日志解读全攻略

第一章:构建失败不再迷茫,Docker Buildx日志解读全攻略在使用 Docker Buildx 进行多平台镜像构建时,构建失败是常见问题。理解其日志输出结构是快速定位问题的关键。Buildx 的日志不仅包含标准的层构建信息,还可能涉及跨平台交叉编…

作者头像 李华
网站建设 2026/4/18 5:23:13

【限时揭秘】云原生Agent实现Docker服务发现的4种高级模式

第一章:云原生Agent与Docker服务发现的演进随着微服务架构的广泛应用,容器化技术成为支撑现代应用部署的核心。Docker作为主流容器运行时,其服务发现机制在云原生生态中经历了显著演进。早期依赖静态配置或外部注册中心的方式已无法满足动态扩…

作者头像 李华
网站建设 2026/4/19 7:28:29

全国铁路货运营业站示意图:专业货运规划终极指南

全国铁路货运营业站示意图:专业货运规划终极指南 【免费下载链接】全国铁路货运营业站示意图详览 这份详尽的《全国铁路货运营业站示意图》以PDF格式呈现,覆盖全国范围内的货运站点分布。文件支持便捷的文字搜索功能,帮助用户快速定位所需站点…

作者头像 李华
网站建设 2026/4/18 5:20:16

为什么90%的量子开发者忽略VSCode环境备份?真相令人震惊

第一章:为什么90%的量子开发者忽略VSCode环境备份?真相令人震惊量子开发者的舒适区陷阱 大多数量子计算开发者依赖 VSCode 搭配 Q#、Python 和专用插件进行算法设计与仿真。然而调查显示,超过九成开发者从未系统备份其开发环境配置。根本原因…

作者头像 李华
网站建设 2026/4/18 8:36:05

Q#-Python版本同步实战方案(2024最新适配策略)

第一章:Q#-Python版本同步概述量子计算作为前沿技术,正在逐步从理论走向实践。在微软的量子开发工具包(Quantum Development Kit, QDK)中,Q# 是专为量子算法设计的领域特定语言,而 Python 则作为主流编程语…

作者头像 李华