媒体流加密是指通过由 app 开发者控制的唯一的密钥和盐为 app 中的音视频流加密。虽然并不是所有应用场景下都需要对媒体流进行加密,但声网提供媒体流加密功能以确保传输过程中数据的保密性。
本文介绍如何在你的 app 中添加声网内置媒体流加密。
下图描述了启用媒体流加密后的数据传输流程。声网推荐使用 AgoraEncryptionModeAES128GCM2
或 AgoraEncryptionModeAES256GCM2
加密模式,并设置密钥和盐。
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见快速开始:
参考如下步骤,为你的 app 添加内置媒体流加密功能:
在你的服务端生成一个密钥和盐;
在你的服务端,参考以下命令,通过 OpenSSL 随机生成 String 型、32 字节的密钥:
// 随机生成一个 String 型、32 字节的密钥
openssl rand -hex 32
dba643c8ba6b6dc738df43d9fd624293b4b12d87a60f518253bd10ba98c48453
在你的服务端,参考以下命令,通过 OpenSSL 随机生成 Base64 编码、32 字节的盐:
// 随机生成一个 Base64 编码、32 字节的盐
openssl rand -base64 32
X5w9T+50kzxVOnkJKiY/lUk82/bES2kATOt3vBuGEDw=
实现客户端逻辑:
根据以下步骤,手动为你的项目添加加密库:
将 SDK 包中的 AgoraRtcCryptoLoader.framework
复制到你的项目文件夹中。
打开 Xcode (此处以 Xcode 11.0 为例),进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content 菜单。
点击 + 和 Add Other...,添加 AgoraRtcCryptoLoader.framework
。
为确保动态库的签名和 app 的签名一致,将动态库的 Embed 属性设置为 Embed & Sign。
在 ViewController.swift
文件中添加以下代码,导入 AgoraRtcCryptoLoader
库:
import AgoraRtcCryptoLoader
从服务端获取 String 型的密钥和 Base64 编码的盐。
将盐从 Base64 转换成 uint8_t。
加入频道前,调用 enableEncryption,设置 AgoraEncryptionModeAES128GCM2
或 AgoraEncryptionModeAES256GCM2
加密模式,并将密钥和盐传入 SDK。
以下示例代码展示了该逻辑的实现过程:
func getEncryptionSaltFromServer() -> Data {
// 将 Base64 编码的盐转换成 uint8_t
return "EncryptionKdfSaltInBase64Strings".data(using: .utf8)!
}
// 创建一个 AgoraEncryptionConfig 实例
let config = AgoraEncryptionConfig()
// 将加密模式设置为 AgoraEncryptionModeAES128GCM2
config.encryptionMode = .AES128GCM2
// 从服务端获取 Base64 编码的盐
config.encryptionKdfSalt = getEncryptionKdfSaltBase64FromServer()
// 从服务端获取 String 型的密钥
config.encryptionKey = getEncryptionKeyFromServer()
let ret = agoraKit.enableEncryption(true, encryptionConfig: config)
if ret != 0 {
self.showAlert(title: "Error", message: "enableEncryption call failed: \(ret), please check your params")
}
本节提供了在实现流媒体加密功能时可能需要的参考信息。
声网在 GitHub 上提供一个开源的内置媒体流加密示例项目。你可以前往下载,或查看其中的源代码。
根据以下步骤,通过 Cocoapods 集成加密库:
安装 CocoaPods。安装指南请参考 Getting Started with CocoaPods。
在终端,打开项目路径,运行 pod init
命令,在项目文件夹中创建 Podfile
。
打开 Podfile
,删除所有内容后,输入以下内容。注意将 Your App
替换为你的 Target 名称,并将 version
替换成你需要集成的 SDK 版本。
# platform :ios, '9.0'
target 'Your App' do
pod 'AgoraRtcEngine_iOS_Crypto', '~> version
end
回到终端,运行 pod install
命令,安装声网 SDK。SDK 安装成功后,终端会显示 Pod installation complete!
,你可以在项目文件夹中看到 xcworkspace
文件。
打开 Xcode 中生成的 xcworkspace
文件。
如需与 Web 平台的音视频 SDK 互通,你还需要将本文提到的 String 型密钥从 Hex 编码格式转换成 ASCII 编码格式。