这是参考sipdroid data encrypt failed 我尝试使用XOR操作而不是反向字节代码来发送数据包并在SipdroidSocket.class中接收数据包。 我遇到了同样的问题(噪音太大) 请指导我在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;
}
请注意,请尝试一下。
答案 0 :(得分:0)
最后它奏效了!不得不插手代码的其他部分。 XOR操作现在运行良好并达到了目标。