2015-04-23 82 views
0

这是参照sipdroid data encrypt failed 我尝试使用XOR操作而不是反向字节代码来发送数据包并在SipdroidSocket.class中接收数据包。 我经历了同样的问题(噪音太大) 请指引我在加密和后期reply.I我张贴我试过的代码片段中SipdroidSocket.class解密包加密开放源代码VoIP Android


对不起。请参阅原始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

我们可以看到你的代码吗?你已经尝试过了吗? – Martze

回答

0

最后它的工作!必须插手代码的其他部分。 XOR操作现在可以正常工作并达到目标。