Python 脚本:将 .m3u8 文件解密,支持任意 .key 文件格式
Python 脚本:将 .m3u8 文件解密,支持任意 .key 文件格式
本脚本使用 Python 3 语言编写,可以读取目录下的 .m3u8 文件,并使用同目录下的任意 .key 文件进行解密。脚本支持错误处理和日志记录,方便用户调试和排查问题。
修改后的代码如下:
import os, shutil, base64, traceback
for dirs, _, files in os.walk('.'):
for file in files:
if file.endswith('.m3u8'):
try:
key_file = next((f for f in files if f.endswith('.key')), None)
if key_file:
with open(os.path.join(dirs, key_file), 'rb') as f:
key = f.read()
else:
key = None
except:
print(traceback.format_exc())
with open('error.txt', 'a+') as f:
f.write(dirs + '\n')
if key:
if file.split('.')[0]:
filename = os.path.join(dirs, file.split('.')[0] + '.m3u8')
else:
filename = os.path.join(dirs, file)
jroot = os.path.join(dirs, file)
with open(jroot, 'r+', encoding='ansi') as f1:
a = f1.read().splitlines()
a[4] = '#EXT-X-KEY:METHOD=AES-128,URI='base64:{0}'.format(base64.b64encode(key).decode())
f1.seek(0)
for line in a:
f1.write(line + '\n')
f1.close()
try:
os.rename(jroot, filename)
except:
print(traceback.format_exc())
with open('error.txt', 'a+') as f:
f.write(dirs + '\n')
else:
print(f'No .key file found for {os.path.join(dirs, file)}')
代码解析:
- 脚本使用
os.walk('.')遍历当前目录及其子目录,查找所有 .m3u8 文件。 - 对于每个 .m3u8 文件,脚本会查找同目录下的 .key 文件。
- 如果找到 .key 文件,脚本会读取 .key 文件的内容作为解密密钥。
- 脚本使用
base64库对解密密钥进行编码,并将其插入 .m3u8 文件的第 5 行,用于解密视频流。 - 脚本会将解密后的 .m3u8 文件重命名,并保存在当前目录下。
- 脚本包含错误处理机制,会将错误信息写入
error.txt文件,方便用户排查问题。
使用方法:
- 将代码保存为 .py 文件,例如
decrypt.py。 - 将需要解密的 .m3u8 文件和对应的 .key 文件放在同一个目录下。
- 在终端运行
python decrypt.py命令,即可执行脚本。
注意事项:
- 脚本只能解密使用 AES-128 加密的 .m3u8 文件。
- 脚本要求 .key 文件与 .m3u8 文件位于同一目录下。
- 脚本会将解密后的 .m3u8 文件重命名并保存在当前目录下,请确保当前目录有足够的存储空间。
联系方式:
如果您在使用脚本的过程中遇到任何问题,请随时联系我。
原文地址: https://www.cveoy.top/t/topic/ngOH 著作权归作者所有。请勿转载和采集!