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 设备! - 执行以下操作:
- 在 wowza 目录中应该有 sub-directory 个键,如果需要的话创建它。
- 为每个将流式传输的端点创建名为的文件:
<my_endpoint_name>.key
在他们的示例中,他们使用 myStream.key
.
- 这个文件的内容很简单:
cupertinostreaming-aes128-key: secret
cupertinostreaming-aes128-url: <url for CLIENT device to get DECRYPTION key>, for example: http://example.com/key_service.php
- 在该页面的示例部分,有示例脚本将使用正确的 headers 以特定格式输出密钥。将此文件放在那个 url 下(在这个例子中:
http://example.com/key_service.php
)并用你的秘密替换那里的秘密(DE51A7254739C0EDF1DCE13BBB308FF0
)。您可以将其他参数传递给此脚本(见下文)。该文件将由客户端设备自动调用(Wowza 将指示客户端获取它)以获取密钥。它可以是不同的域,也可以是所有流的一个文件。
- 传递给播放列表文件的任何其他参数
(http://[wowza-ip-address]:1935/live/<my_endpoint_name>/playlist.m3u8
) 将传递给您的密钥生成 php 脚本:您可以传递用户 ID 或其他形式的 authentication/authorization 并使用它生成验证用户,然后才生成 return 密钥 - 请记住该密钥不能依赖于用户 - 它必须与步骤 2 中的文件相同。
就是这样。
tl;dr:使用密钥和 url 创建密钥文件,该密钥将被 returned。在 url 处创建文件,该文件将 return 该键。
我正在使用 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 设备! - 执行以下操作:
- 在 wowza 目录中应该有 sub-directory 个键,如果需要的话创建它。
- 为每个将流式传输的端点创建名为的文件:
<my_endpoint_name>.key
在他们的示例中,他们使用myStream.key
. - 这个文件的内容很简单:
cupertinostreaming-aes128-key: secret
cupertinostreaming-aes128-url: <url for CLIENT device to get DECRYPTION key>, for example: http://example.com/key_service.php
- 在该页面的示例部分,有示例脚本将使用正确的 headers 以特定格式输出密钥。将此文件放在那个 url 下(在这个例子中:
http://example.com/key_service.php
)并用你的秘密替换那里的秘密(DE51A7254739C0EDF1DCE13BBB308FF0
)。您可以将其他参数传递给此脚本(见下文)。该文件将由客户端设备自动调用(Wowza 将指示客户端获取它)以获取密钥。它可以是不同的域,也可以是所有流的一个文件。 - 传递给播放列表文件的任何其他参数
(http://[wowza-ip-address]:1935/live/<my_endpoint_name>/playlist.m3u8
) 将传递给您的密钥生成 php 脚本:您可以传递用户 ID 或其他形式的 authentication/authorization 并使用它生成验证用户,然后才生成 return 密钥 - 请记住该密钥不能依赖于用户 - 它必须与步骤 2 中的文件相同。
就是这样。 tl;dr:使用密钥和 url 创建密钥文件,该密钥将被 returned。在 url 处创建文件,该文件将 return 该键。