我从UDP接收解密消息时遇到问题。
我的代码:
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 :(得分:1)
我认为您只需在致电pakiet.getData()
时获得缓冲区。因此,您只需调用pakiet.getLength()
即可获得缓冲区中的确切数据量。如果使用正确的偏移量和长度调用decrypt函数,则应该取得更大的成功。
答案 1 :(得分:1)
UDP标头包含UDP数据的长度。因此,java中必须有一些API来提取该长度。长度以字节为单位。所以用这个长度初始化你receivedData
。