2301_77602568 2024-02-02 15:40 采纳率: 16.7%
浏览 2

python爬取m3u8关于key编码问题

img

在爬取m3u8视频视频网站时,在解码过程中发现key是乱码,导致无法解密ts文件。上网寻求帮助。
请问这key该怎么处理啊?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-02 15:42
    关注

    引自免费微信小程序:皆我百晓生

    在爬取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文档以及相关加密规范来确定正确的解密流程。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月2日

悬赏问题

  • ¥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-桌布的计算