PHP 中的 AES-128 (WOWZA)。这该怎么做?

AES-128 (WOWZA) in PHP. How to do this?

我正在使用 Wowza Streaming Engine,我想用 HLS 流媒体方法加密 mp4 文件,但我不知道如何在 PHP 中创建 AES-128 密钥?

Wowza 有自己的 genkey 但它在 java 中并且必须在 SSH 中完成。我想在 PHP 中执行此操作,但我不知道它如何创建密钥?有关生成密钥的信息在这里 - https://www.wowza.com/docs/how-to-secure-apple-http-live-streaming-aes-128-external-method

你能告诉我如何在 PHP 中生成这样的密钥吗?

密钥可以是您想要的任何内容,只要它是 16 字节(128 位)并且格式为十六进制字符串即可:

$key = strtoupper(bin2hex(random_bytes(16)));

我假设你已经配置了 wowza 并且可以传输未加密的流。

密钥为流式传输它的所有客户端共享。您不需要以任何方式生成它。那篇文章中的工具只是一个实用程序,可以创建随机密钥并准备文件。但你可以手动完成。

对其进行加密 - 但仅适用于 ios 设备! - 执行以下操作:

  1. 在 wowza 目录中应该有 sub-directory 个键,如果需要的话创建它。
  2. 为每个将流式传输的端点创建名为的文件:<my_endpoint_name>.key 在他们的示例中,他们使用 myStream.key.
  3. 这个文件的内容很简单:

cupertinostreaming-aes128-key: secret cupertinostreaming-aes128-url: <url for CLIENT device to get DECRYPTION key>, for example: http://example.com/key_service.php

  1. 在该页面的示例部分,有示例脚本将使用正确的 headers 以特定格式输出密钥。将此文件放在那个 url 下(在这个例子中:http://example.com/key_service.php)并用你的秘密替换那里的秘密(DE51A7254739C0EDF1DCE13BBB308FF0)。您可以将其他参数传递给此脚本(见下文)。该文件将由客户端设备自动调用(Wowza 将指示客户端获取它)以获取密钥。它可以是不同的域,也可以是所有流的一个文件。
  2. 传递给播放列表文件的任何其他参数 (http://[wowza-ip-address]:1935/live/<my_endpoint_name>/playlist.m3u8) 将传递给您的密钥生成 php 脚本:您可以传递用户 ID 或其他形式的 authentication/authorization 并使用它生成验证用户,然后才生成 return 密钥 - 请记住该密钥不能依赖于用户 - 它必须与步骤 2 中的文件相同。

就是这样。 tl;dr:使用密钥和 url 创建密钥文件,该密钥将被 returned。在 url 处创建文件,该文件将 return 该键。