2013-05-14 76 views
0

我想通過使用反向字節順序來自定義sipdroid客戶端。我認爲這使得其他VoIP客戶端無法解碼這些數據。sipdroid數據加密失敗

所以我讀了SipDroid的代碼。我發現RTP數據都會這樣說: 1. AudioRecord.read(originalPCM) 2編碼(originalPCM,encodedData) 3. rtp_socket.send(rtp_packet)//該encodeData是rtp_packet的數據部分

而另側是: 1. rtp_receive(rtp_packet) 2.解碼(encodeData,PCMData)//的encodeData是rtp_packet的數據部分 3. AudioTrack.write(PCMData)

所以我修改SipdroidSocket類。在send方法中,我在開始處添加以下代碼。

byte[] b = pack.getData(); 
reverse(b); 
pack.setData(b); 

並在接收方法的末尾添加以下代碼。

byte[] b = pack.getData(); 
    reverse(b); 
    pack.setData(b); 

我想這樣,兩個客戶端可以照常工作。但它失敗了。我不知道原因。請幫我找出原因。謝謝。

+0

聽起來好像您希望數據在發送時被加密,但是顛倒字節順序不會提供這種保護。 您顯示的代碼不應該有任何問題。你有沒有試過在沒有修改的情況下運行這個?在那種情況下,它有效嗎? – Flipbed 2013-05-14 09:00:21

+0

我知道倒車的方式不會給數據足夠的保護。我只是用這個作爲一個嘗試。如果有效,我會將reverse()方法更改爲加密數據的一種有用方法。 – Fakebear 2013-05-14 09:02:53

+0

如果我刪除修改。這兩個客戶端工作正常。但隨着我的修改,只有噪音。我在這兩種方法中打印日誌。我發現send方法只調用一次,在這個過程中必須有一些數據檢查。所以發送不成功。 – Fakebear 2013-05-14 09:05:40

回答

0

除非您一次收到2,4,8個字節,否則不應該翻轉孔緩衝區。 根據數據的存儲方式,您應該將數據視爲2,4,8個字節的元素。我在這裏看到的代碼不起作用。 假設您有一個數據字節0x01,0x02,0x03,0x04,0x05,0x06,0x0,07,0x08 的緩衝區,存儲爲0x04030201-0x08070605的4字節元素。 反轉孔緩衝區將產生0x08,0x0,07,0x0,6,0x05,0x04,0x03,0x02,0x01 這是錯誤的,因爲您將以0x05060708-0x04030201 結束如果一次反轉一個元素(4字節)。 請記住,元素的大小取決於值的存儲方式