重用密码(防止初始化)

Reuse Cipher (prevent init)

我正在努力提高我们的加密性能。我们需要流式传输加密视频,因此我们加密每个帧(准确地说是 h.264 NALU)并通过网络发送。我们无法通过这种方式在 Android 上流式传输 PAL 视频。

我们正在使用 AES (AES/CBC/PKCS7Padding),并且我们对会话中的每个帧使用相同的密钥和 IV。我知道,它不是很安全,但实施时我不在场,现在改变它已经太晚了。因此,对于每一帧,我们使用相同的参数(密钥和 IV)调用 Cipher.init(),然后只调用 doFinal。是否有可能以某种方式防止这种情况并重用已经初始化的 Cipher 对象?

或者是否有比 AES 更好的视频流算法?我们正在使用 SpongyCastle。有没有更快的东西?或者我们应该使用 OpenSSL 在 NDK 中重写它?

is there some better algorithm for video streams than AES?

这取决于您的密码学强度。主要标准是什么。

Is there something faster?

如果主要标准是速度,那么请查看一些 stream 密码。它们更快(旨在传输 audio/video 流)但比 block 密码 AES 更弱。

您还可以在 CBC 模式下使用 AES 来增强解密 - 它可以并行化。

只调用一次 init() 然后重复调用 doFinal() 就是我们所做的,它提高了 50% 以上的吞吐量。