这是参考sipdroid 数据加密失败 我尝试在 SipdroidSocket.class 中使用 XOR 操作而不是反向字节码发送数据包和接收数据包。我遇到了同样的问题(噪音太大)请指导我在 SipdroidSocket.class 中加密和解密数据包
抱歉回复晚了。我正在发布我尝试过的代码片段。请参阅原始的 RtpSocket.java 和 SipdroidSocket.java 类以获取完整视图。我只是把片段放在这里。
在 RtpSocket.java 中,我获取了一个静态值并收集了数据包的标头长度。然后在 SipdroidSocket.java 中使用此标头长度,以便在使用有效负载进行调整之前删除标头部分: 在 SipdroidSocket.java 中,在发送和接收函数中进行了以下编辑:
public void receive(DatagramPacket pack) throws IOException {
if (loaded) {
impl.receive(pack);
byte[] b = pack.getData(); // fetch data from receiver
int len = RtpSocket.header;
pack.setData(do_something(b, len)); // do the XORing to retrieve
// original data
} else {
super.receive(pack);
byte[] b = pack.getData();
int len = RtpSocket.header;
pack.setData(do_something(b, len));
}
}
public void send(DatagramPacket pack) throws IOException {
byte[] b = pack.getData(); // fetch original data
int len = RtpSocket.header;
pack.setData(do_something(b, len)); // replace with tweaked data
if (loaded)
impl.send(pack);
else
super.send(pack);
}
private byte[] do_something(byte[] b, int len) {
// TODO Auto-generated method stub
int new_buff_len = b.length - len;
byte[] new_buff = new byte[new_buff_len];
int i = 0;
for (i = len; i < b.length; i++) // separating header values
{
new_buff[i] = (byte) (b[i] ^ 0x43); // XORing original packet
// payload before sending and
// after receiving to get
// original data on both sides
}
return new_buff;
}
请尝试一下并建议我。