Android

媒体流加密

更新时间: 2021/06/30 02:46:06

在金融行业等对用户隐私数据要求较高的行业场景中,往往需要额外采用媒体流加密方式保障用户数据在网络传输过程中的安全性、保障用户的信息安全和数据安全。网易云信在默认加密算法的基础上,提供了内置国密加密方案,进一步保障数据安全。

方案架构

  • 您的服务端生成密钥并加密传输给客户端。
  • 用户 A 采集音视频流之后,通过 enableEncryption 启用加密并传入加密模式和密钥,将加密后的音视频流传输到网易云信音视频服务。
  • 网易云信音视频服务中转加密的音视频流。
  • 用户 B 收到音视频流之后,通过 enableEncryption 传入加密模式和密钥,解密媒体流,并解码与渲染。

注意事项

  • 同一房间内,所有开启媒体流加密的用户必须使用相同的加密模式和密钥,否则使用不同密钥的成员加入房间时会报错 kNERtcErrEncryptNotSuitable(30113)。
  • 安全起见,建议每次启用媒体流加密时都更换新的密钥。

实现方法

在加入房间前,调用 enableEncryption 方法开启媒体流加密功能,并设置加密模式和密钥。

  • 加密模式目前仅支持国密 SM4 对称加密算法。
  • 密钥由客户端生成,格式为 String 类型的字符串。

操作步骤:

  1. 在您的服务端生成密钥。

    参考以下命令通过 OpenSSL 随机生成 String 型、16 字节的密钥。

    // 随机生成一个 string 型、16 字节的密钥,并将该密钥传入 enableEncryption 的 config 参数。
    openssl rand -hex 16
    dba643c8ba6b6dc738df43d9fd624293b4b12d87a60f518253bd10ba98c48453
    
  2. 客户端从服务端获取 String 型密钥,并在加入房间前调用 enableEncryption 时传入 SDK。

    同一房间内,所有开启媒体流加密的用户必须使用相同的加密模式和密钥,否则使用不同密钥的成员加入房间时会报错 kNERtcErrEncryptNotSuitable(30113)。

示例代码

  NSString *encryptKey = @"Your encrypt key";
  NERtcEncryptionConfig *config = [[NERtcEncryptionConfig alloc]init];
  config.mode = NERtcEncryptionModeGMCryptoSM4ECB;
  config.key = encryptKey;
   
  [[NERtcEngine sharedEngine] enableEncryption:encryptEnabled config:config];
此文档是否对你有帮助?
有帮助
去反馈
  • 方案架构
  • 注意事项
  • 实现方法
  • 示例代码