2012-12-02 219 views
0

我有解密UDP接收消息的問題。我無法解密發送消息AES

我的代碼:

byte[] receiveData= new byte[1024]; 

DatagramPacket pakiet = new DatagramPacket(receiveData, receiveData.length); 
udp.receive(pakiet); 

String wiadomosc = new String(pakiet.getData()); 
publishProgress(wiadomosc); 
String szyfr = main.preferences.getString("SZYFR_TCP", ""); 
if(!szyfr.equals("1")) 
{ 
    enc = new Encryptor(kluczByte, getCode()); 
    Log.e("myApp", "jestem 2"); 
    Log.e("message = ","" + wiadomosc); 

    wiadomosc = enc.decrypt(wiadomosc); 
    publishProgress(wiadomosc); 
} 

在日誌中我看到了可變wiadomosc有數據和許多不好的字是這樣的:

的字節數組reciveData有1024個元素。我認爲我的接收消息較短,所以它必須將元素添加到1024.如何從字符串中刪除這些字符?因爲我無法解密此字符串,因爲我收到了「損壞的便箋塊」異常。

+0

請注意,您應該爲字符串構造函數(和另一端的getBytes())設置字符編碼。 –

回答

1

我認爲您只需撥打pakiet.getData()即可獲得緩衝區。所以你可以調用pakiet.getLength()來獲得緩衝區內的確切數據量。如果你用正確的偏移和長度調用解密函數,你應該會獲得更多的成功。

1

UDP標頭包含UDP數據的長度。所以在java中必須有一些API來提取這個長度。長度以字節爲單位。所以用這個長度初始化你receivedData

+0

我想您會同時收到完整的包,然後使用我的答案中的方法來提取長度 –

+0

@owlstead:是的,可能你是對的我只是想指出,UDP頭部包含字節長度 – Ashwin

+0

無論如何我們可以說我們想要的任何東西,反正這個屁股被投票的機會是零。我想我們必須自己做:) –