有加密的m3u8视频下载后解码方法

作者: admin 分类: python 发布时间: 2020-03-15 12:36

这篇文章是因为我在用python解决了下载m3u8文件中众多的ts文件后,发现有个网站的视频TS片段竟然下载下来没法播放,打开存放这些ts地址的m3u8文件后,发现有这么一段字符:

EXT-X-KEY:METHOD=AES-128,URI="key.key"

意思就是这个视频时有加密的,加密的key就保存在跟m3u8文件一样的网址的地方,比如m3u8文件地址是:

http://www.caogenbj.com/index.m3u8

那么key文件地址就是:

http://www.caogenbj.com/key.key

下载下来这个文件,可以看到里面只有几个不知道啥意思的字符:

YDpcJEVf7h6UByNg

然后就是利用这个字符串去解密了,在网上找到下面这段文字,挺有用的,我就是根据这个说明,成功实现解码:

下载的方法与以往的爬虫程序相同,额外不同的在于写入文件的瞬间。首先因为需要解码 AES 这种加密方式需要用到特殊的模块 AES,所以我们要去安装 Crypto,按照如下的方法导入类来使用。注意有个坑就是,安装 Crypto 的同时需要安装 PyCryptodome(pycrypto 根据开发者的说法已经不再维护,这个是新的库,功能和接口基本一致),才可以顺利导入。如果发生了 ImportError,显示没有 Crypro 库,那么就去 site-packages 里面看看文件名是不是 crypto,改成 Crypto 应该就没问题了。

from Crypto.Cipher import AES
 
data = ......
key = ......
cryptor = AES.new(key.encode('utf-8'), AES.MODE_CBC)
 
with open(filepath, 'ab') as file:
    file.write(cryptor.decrypt(data))

如果没有在把类型为 str 的 key 改成 bytes 类型的话会报 TypeError。然后似乎 open 的地方打开方式 ‘ab’ 或者 ‘ab+’ 都没什么区别,只要是二进制写已经就可以。没意外的话就可以在指定的文件夹中看到下载的一系列 ts 文件,而且是可以播放的。但是每一个片段的时间都很短。

其实我现在还是不太懂cryptor = AES.new(key.encode('utf-8'), AES.MODE_CBC)这段代码的具体含义,我的理解就是生成一个这样的对象,可以解密这种AES-128加密的视频的一个对象。

相关文章

发表评论

邮箱地址不会被公开。 必填项已用*标注

Powered by 草根站长笔记 © 2015-2020 草根站长笔记 Inc.版权所有,禁止转载