我正在使用Speex库在p2p语音聊天应用程序中编码/解码bytearray。 我尝试过使用AES加密,但由于加密和解密,我的UI线程挂断了。我将尝试用伪代码编写问题。
OnPlayer Side:
while(keep_on_running) {
socket.receive(packet);
encodedFrame = AESEncrytion.decrypt(encodedFrame);
Speex.decode(encodedFrame, encodedFrame.length, pcmFrame);
}
在记录器方面:
while(keep_on_running) {
Speex.encode(pcmFrame, encodedFrame);
AESEncrytion.encrypt(encodedFrame);
socket.send(packet)
}
我想知道加密/解密连续数据流的最佳方法。
答案 0 :(得分:3)
在流密码模式下使用流密码或分组密码加密/解密连续数据流的最佳方法是(等待它)。
分组密码操作模式(例如CBC或 - 不安全 - ECB模式)的问题是它们需要每个加密/解密操作的完整数据块。这意味着您必须一次为AES提供16个字节。这很容易导致您遇到阻塞问题。
现在,如果你使用AES counter mode加密,那么你有几个好处:
如果遇到性能问题,您还可以查看专门的流密码,例如流行的Salsa20流密码。流密码通常专门用于高效率/高带宽通信。
[编辑]
请注意,TLS也已定义为适用于UDP包。如果您不确定是否实现自己的传输协议,那么使用标准化选项会更好。请注意,您可能找不到支持运行时开箱即用的库。
来自维基百科的引用:
但是,它也已经实现了面向数据报的传输 协议,例如用户数据报协议(UDP)和数据报 拥塞控制协议(DCCP),已经标准化的使用 独立使用术语数据报传输层安全性(DTLS)。