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操作現在可以正常工作並達到目標。