解密使用 AES-128 加密的 M3U8 播放列表,无需 IV

2023-12-09

我目前正在构建一个用于下载 M3U8 播放列表的应用程序,但我遇到了一个问题:如果播放列表使用 AES-128 加密,例如有这样一行:

#EXT-X-KEY:METHOD=AES-128,URI="https://website.com/link.key",IV=0xblablabla

我必须在将这些段写入输出文件之前对其进行解密,如果存在 IV,则以下代码对我有用,但如果 IV 属性不存在,则解密会产生错误的结果:

var iv = "parsed iv"; // empty if not present
var key_url = "parsed keyurl";

var AES = new AesManaged()
{
    Mode = CipherMode.CBC,
    Key = await Client.GetByteArrayAsync(key_url)
};

if (!string.IsNullOrEmpty(iv))
    AES.IV = Functions.HexToByte(iv.StartsWith("0x") ? iv.Remove(0, 2) : iv);
else
    AES.IV = new byte[16];

//...

using (FileStream fs = new FileStream("file.ts", FileMode.Create, FileAccess.Write, FileShare.Read))
{
    var data = DownloadSegment(...); // Downloads segment as byte array (encrypted)

    byte[] temp = new byte[data.Length];

    ICryptoTransform transform = AES.CreateDecryptor();
    using (MemoryStream memoryStream = new MemoryStream(data))
    {
        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Read))
        {
            cryptoStream.Read(temp, 0, data.Length);
        }
    }

    await fs.WriteAsync(temp, 0, temp.Length);
}

(这显然只是一个代码片段,包含解密部分,因为所有解析和下载都工作正常)。

你们中有人知道如何在没有 IV 的情况下解密 M3U8 播放列表文件中的 AES-128 加密片段吗?只是

#EXT-X-KEY:METHOD=AES-128,URI="https://website.com/link.key"?

任何帮助是极大的赞赏。提前致谢!


HLS 规范指出 [1]:

AES-128 的加密方法表明媒体段是 使用高级加密标准 (AES) 完全加密 [AES_128] 具有 128 位密钥、密码块链接 (CBC) 和 公钥加密标准 #7 (PKCS7) 填充 [RFC5652]。 CBC 在每个段边界上重新启动,使用 初始化向量 (IV) 属性值或媒体序列 数字作为 IV;参见第 5.2 节。

所以你必须使用的值EXT-X-MEDIA-SEQUENCE变体播放列表中的标签。一定要进行推断,即为每个段增加它。

[1] https://www.rfc-editor.org/rfc/rfc8216#section-4.3.2.4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解密使用 AES-128 加密的 M3U8 播放列表,无需 IV 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 初始化二维字符数组

    我试图用这个颂歌初始化二维字符数组 int x 4 int y 4 char plg x y o o o o o o o o o o o o o o o o 但是这段代码会抛出错误error excess elements in char
  • 如何让 MSI 安装程序在卸载服务时运行一些代码

    我在卸载服务时遇到了一些问题 我想执行一些操作 我已将代码添加到 System ServiceProcess ServiceProcessInstaller BeforeUninstall 事件中 并且到覆盖方法 OnBeforeUnins
  • 将 HttpClient 与 SSL 和证书结合使用

    虽然我已经熟悉 HTTPS 和 SSL 的概念 但我最近开始一些开发 发现我有点困惑 要求是我编写一个小型 Java 应用程序 该应用程序在连接到扫描仪的机器上运行 扫描文档时 会拾取该文档并将文件 通常为 PDF 通过互联网发送到我们的应
  • Python 检测 EOF

    我正在尝试在读取 csv 文件时编写这样的 if 语句 if row or EOF do stuff 我在网上搜索过 但找不到任何方法可以做到这一点 帮助 with open fname rb as f for line in f line
  • ios9 拍照时仅显示空白屏幕

    我希望使用 IOS 9 手机的访问者能够通过网页将图片上传到我的网络服务器上 在 iOS 8 及之前的版本中 这可以通过使用 input 元素简单地实现
  • Java支持多重继承吗?

    从 Java 的事实来看 Java 中的所有类都有一个父类Object 但是同样的Java说它不支持多重继承 但是这段代码是什么意思呢 public class A extends B Blah blah blah 从上面的代码来看 这意味
  • Python __call__ 特殊方法实例

    我知道 call 当调用类的实例时 会触发类中的方法 但是 我不知道什么时候可以使用这种特殊方法 因为可以简单地创建一个新方法并执行在 call 方法 您可以调用方法 而不是调用实例 如果有人给我这种特殊方法的实际用法 我将非常感激 本示例
  • 类型错误:使用 pandas apply 和 lambda 时,字符串索引必须是整数

    我有一个数据框 一列是 URL 另一列是名称 我只是尝试添加第三列 该列接受 URL 并创建 HTML 链接 专栏newsSource有链接名称 并且url有网址 对于数据框中的每一行 我想创建一个具有以下内容的列 a href newsS
  • 获取导致 SQLiteConstraintException 的约束名称

    如何获取导致 SQLiteConstraintException 的约束的名称 在异常上调用 toString 只会给我 错误代码 19 约束失败 并且异常中没有方法可以获取原因 这使得调试我的sql变得相当困难 从版本开始3 7 17 S
  • 使用 Vega Lite 显示已经聚合的数据

    我正在尝试显示随时间变化的总和的堆积条形图 数据看起来像这样 date 12345 sumA 100 sumB 150 我将 x 轴编码为 日期 字段 我需要将日期 12345 的条形图堆叠起来 其中一部分高 100 另一部分高 以另一种颜
  • 在 C# 中从 DataGridView 更新 SQL 数据库

    有一些关于此的教程 但我假设我一定实现了错误 因为我从组合教程中遵循的代码无法正常工作 这些是教程 https youtu be i4mYXSaD4w https youtu be sB0A6FIhUM 我正在尝试创建一个显示一些基本数据的
  • 在Prolog中逐行读取文件

    我想读取一个纯文本文件并对每一行应用一个谓词 谓词包含write其输出 我该怎么做呢 您可以使用read读取流 记得调用at end of stream以确保没有语法错误 例子 读文件 pl main open myFile txt rea
  • NSAutoresizingMaskLayoutConstraint 的 UITableViewCell 舍入错误,但在 Storyboard 和 heightForRowAtIndexPath 中正确设置大小:

    我正在尝试使用 AutoLayout 在表视图单元格中配置子视图 在理想情况下 希望表视图单元格的高度足以包含所有子视图 然而 这似乎不可能 因为单元的高度是在实际创建单元之前确定的 因此 现在 我只是查看了设置的约束并计算了包含所有内容所
  • 每个项目的 Terraform 都有不同的后端

    我是 Terraform 的新手 仍在研究文档 尚未找到一种方法来适应我需要实现的特定解决方案的设置 并希望某种灵魂能够能够推动我朝正确的方向前进 我正在尝试管理一组参数化模板 这些模板部署支持我们在 GCP 中开发的新应用程序所需的一切
  • Neo4j 中带空格的全文搜索

    当 neo4j lucene 自动索引处于精确模式 默认 时 查询类型为 start n node node auto index name asfd a return n 正常工作 假设您有一个名为asdf adsf例如 但是 当将索引切
  • 使用 Docker Swarm 和覆盖网络进行组播

    我正在测试使用多播进行发现的应用程序 我创建了一个 Swarm 集群和一个network create d overlay swarm net因此容器在多个 Swarm 代理主机之间共享相同的 LAN 发现好像不行 所以我安装了tshark
  • 新版本应用部署后需要重启apache + APC吗?

    当我们部署应用程序时 我们只需创建一个新文件夹并指向它的符号链接 这样 apache 就会始终找到最新版本 然而 当我们部署并继续测试而不首先重新启动 apache 服务器时 我们会遇到奇怪的错误 我们还运行了 APC 感觉缓存与此有关 当
  • 将数据从设备复制到主机时出现无效参数错误

    我在将数据从设备复制回主机时遇到问题 我的数据排列在一个结构中 typedef struct Array2D double arr int rows int cols Array2D arr是一个 平面 数组 rows and cols描述
  • 如何将 CORS 与 grails Rest API 一起使用?

    我正在使用 grails 开发 Rest Api 它正在 localhost 8080 上运行 当我与 POSTMAN 通话时 它以 json 响应 我想使用这些数据 并在其他域上运行的网页上执行 CRUD 操作 当我尝试调用用 grail
  • 解密使用 AES-128 加密的 M3U8 播放列表,无需 IV

    我目前正在构建一个用于下载 M3U8 播放列表的应用程序 但我遇到了一个问题 如果播放列表使用 AES 128 加密 例如有这样一行 EXT X KEY METHOD AES 128 URI https website com link k