在爬取m3u8视频视频网站时,在解码过程中发现key是乱码,导致无法解密ts文件。上网寻求帮助。
请问这key该怎么处理啊?
python爬取m3u8关于key编码问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在爬取m3u8视频文件时,如果遇到加密的key出现乱码问题,这通常是由于编码不匹配导致的。m3u8中的key通常是一个base64编码的字符串,需要正确解码后才能用于AES解密TS文件片段。以下是一个处理此类问题的详细步骤和代码示例:
步骤1:读取并提取m3u8文件中的key
import requests import base64 import re # 假设你已经获取到m3u8文件内容 m3u8_content = requests.get('http://example.com/path/to/m3u8').text # 使用正则表达式查找EXT-X-KEY标签以获取key key_pattern = re.compile(r'EXT-X-KEY:METHOD=AES-128,URI="(.+?)"') match = key_pattern.search(m3u8_content) if match: key_url = match.group(1) else: print("Key not found in m3u8 file.") # 获取key的实际内容(这里假设key是直接base64编码的,而非指向另一个URL) key_data = requests.get(key_url).content
步骤2:解码base64编码的key
# 解码base64编码的key key = base64.b64decode(key_data).decode('utf-8') # 这里尝试使用UTF-8编码解码 # 如果你的key不是UTF-8编码,请尝试其他可能的编码方式,例如ISO-8859-1或根据网站实际编码情况调整 # key = base64.b64decode(key_data).decode('iso-8859-1')
步骤3:使用解码后的key进行AES解密
对于AES解密部分,可以使用如pycryptodome这样的库。下面是一个简化的示例:
from Crypto.Cipher import AES from Crypto.Util.Padding import unpad # 假设你已经获取到了ts文件数据(这里简化为data变量) data = ... # 将key转换为bytes,并补足为16字节(AES-128的要求) key_bytes = (key.encode() + b'\0' * (16 - len(key.encode())))[:16] # 创建AES解密器 cipher = AES.new(key_bytes, AES.MODE_CBC, iv=...) # 需要提供一个初始化向量IV # 对TS文件片段进行解密 decrypted_data = cipher.decrypt(data) # 移除填充 try: decrypted_plaintext = unpad(decrypted_data, AES.block_size) except ValueError as e: print(f"Decryption or padding error: {e}")
注意:上述代码中未包含初始化向量(IV)的处理,因为在m3u8文件中可能会有EXT-X-KEY标签下的IV属性,你需要从那里提取IV值并传递给AES解密函数。
请确保你已安装了必要的Python库,如requests和pycryptodome,可以通过pip安装:
pip install requests pycryptodome
同时,针对不同的m3u8加密模式和参数,解密方法可能会有所不同,因此建议仔细阅读m3u8文档以及相关加密规范来确定正确的解密流程。
解决评论 打赏 举报无用 1
悬赏问题
- ¥15 BP神经网络控制倒立摆
- ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
- ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
- ¥30 Unity接入微信SDK 无法开启摄像头
- ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
- ¥20 cad图纸,chx-3六轴码垛机器人
- ¥15 移动摄像头专网需要解vlan
- ¥20 access多表提取相同字段数据并合并
- ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
- ¥20 Java-Oj-桌布的计算