重用密码(防止初始化)
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% 以上的吞吐量。
我正在努力提高我们的加密性能。我们需要流式传输加密视频,因此我们加密每个帧(准确地说是 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% 以上的吞吐量。