1. AES算法和SM4算法扫盲
AES算法
密码学中的高级加密标准(AdvancedEncryptionStandard,AES),又称Rijndael加密算法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPSPUB197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES有一个固定的128位的块大小和128,192或256位大小的密钥大小。
该算法为比利时密码学家JoanDaemen和VincentRijmen所设计,结合两位作者的名字,以Rijndael命名之。AES在软件及硬件上都能快速地加解密,相对来说较易于操作,且只需要很少的存储空间。作为一个新的加密标准,目前正被部署应用到更广大的范围。
SM4算法
SM4算法全称为SM4分组密码算法,是国家密码管理局2012年3月发布的第23号公告中公布的密码行业标准。SM4算法是一个分组对称密钥算法,明文、密钥、密文都是16字节,加密和解密密钥相同。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密过程与加密过程的结构相似,只是轮密钥的使用顺序相反。
SM4算法的优点是软件和硬件实现容易,运算速度快。
2. 接口说明及调用展示
大牛直播SDK发布的跨平台(Windows/Android/iOS平台)的基于AES/SM4音视频逐帧数据加密整体解决方案,第三方即便是破解了URL,也没法播放,通过抓包工具抓取到数据,也没法正常显示。
此方案的难点是需要了解音视频编码相关的细节,才能进行适当的扩展。优点是常用的rtmp server可以直接支持,通用性很强。只需要改推送端和播放端就好。
2.1 Windows平台RTMP推送端
C++接口:
C#接口:
C#调用展示:
2.2 Windows平台RTMP播放端
C++接口:
C#接口:
调用展示:
2.3 Android平台RTMP推送端
调用展示:
2.4 Android平台RTMP播放端
调用展示:
2.5 iOS平台RTMP推送端
调用展示:
2.6 iOS平台RTMP播放端
调用展示:
3.注意事项
1. RTMP推送端什么时候调用加密接口?
回答:SetUrl之后,开始推送之前;
2. RTMP播放端,什么时候设置Key和IV解密向量?
回答:可以实现自动检测,如检测到推送的RTMP流系AES或SM4加密,会回调上来NT_SP_E_EVENT_ID_NEED_KEY事件,弹出输入Key和IV框,如输入的Key和IV不正确,播放端会收到NT_SP_E_EVENT_ID_KEY_ERROR事件
3. 设置加解密Key和IV,有什么注意事项?
回答:key_size: 如果加密算法是aes, key_size必须是16, 24, 32 这三个值, 其他返回错误; 如果加密算法是sm4, key_size必须是16, 其他值返回错误;iv_size: 当前必须是16, 其他值返回错误。
相关资料:Github: https://github.com/daniulive/SmarterStreaming