2012-12-02 178 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

无论如何我们可以说我们想要的任何东西,反正这个屁股被投票的机会是零。我想我们必须自己做:) –