在音视频数据加密传输过程中,遇到的问题依次记录。
背景:
- 数据大小基本在2M以内
- 加密方式使用对称加密 AES-CBC-128
- 数据使用分段加密
- iv 以及一些业务信息放在数据头部
Question:
分段加密的分段大小制定,对性能影响?
分段大小需要是key长度整数倍的数据长度
加密的延迟远远小于网络I/O的延迟和读取硬盘的I/O延迟. 比如, 在主流PC上, 使用AES在10s内加密几个G的数据是没问题的
分段加密是否每段都需要数据头,iv 和key 是否都重新生成?
- 可以使用每端数据都有数据头
对非128位的整数倍的数据进行加密需要补位多少?
PKCS#7 & PKCS#5
缺几个字节就填几个缺的字节数如果当前数据已经是128bits的倍数了也得要填充,否则无法解密。
对于AES来说PKCS5Padding和PKCS7Padding是完全一样的,不同在于PKCS5限定了块大小为8bytes而PKCS7没有限定。因此对于AES来说两者完全相同,但是对于Rijndael就不一样了。AES是Rijndael在块大小为8bytes时的特例,对于使用其他信息块大小的Rijndael算法只能使用PKCS7
在AES加密当中严格来说是不能使用pkcs5的,因为AES的块大小是16bytes而pkcs5只能用于8bytes,通常我们在AES加密中所说的pkcs5指的就是pkcs7!
加密之后的分段数据大小?
使用AES加密后数据的长度是相同的,主要是因为 AES 加密进行的是一系列的异或操作与循环移位,并没有进行扩展变换。
对于 AES 中的 ecb 和 cbc 可能对加密块需要填充,加密后的长度可能会不一样, cfb 和 ofb 不需要填充。
是否需要考虑 Http 的分包 和 网络乱序情况?
分段加密不涉及到Http的分包,网络包的排序由TCP直接保证