开源VoIP Android上的加密

时间:2015-04-23 11:40:37

标签: android encryption sipdroid

这是参考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;
}

请注意,请尝试一下。

1 个答案:

答案 0 :(得分:0)

最后它奏效了!不得不插手代码的其他部分。 XOR操作现在运行良好并达到了目标。