0

これは、sipdroid data encrypt failed を参照したものです。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;
}

親切に、試してみて、私に提案してください。

4

1 に答える 1

0

最後にそれは働いた!コードの他の部分に干渉する必要がありました。XOR 演算は正常に機能し、目的を達成しました。

于 2015-04-26T17:02:28.603 に答える