如何使用数据报套接字发送和接收密钥

时间:2017-03-13 23:00:44

标签: java sockets udp datagram des

我试图建立一个简单的聊天系统,但我在udp中接收密钥时遇到问题。错误消息显示objectInputStream的问题。

java.io.StreamCorruptedException: invalid stream header: 358A822E
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)

这是发件人代码

InetAddress inetAddress = InetAddress.getLocalHost();
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey myDesKey = keygenerator.generateKey();
Cipher desCipher;

// Create the cipher
desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

// Initialize the cipher for encryption
desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject((Object) myDesKey);
oos.flush();
final byte[] bytes = baos.toByteArray();

DatagramPacket sendPacket = new DatagramPacket(bytes, bytes.length, inetAddress, 999);
socket.send(sendPacket);

这是收件人代码

   Cipher desCipher;
SecretKey myDesKey = null;
// Create the cipher

desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

packetIn = new DatagramPacket(dataOut, dataOut.length);
socket.receive(packetIn);
ByteArrayInputStream bais = new ByteArrayInputStream(packetIn.getData());
ObjectInputStream oos = new ObjectInputStream(bais);
myDesKey = (SecretKey) oos.readObject();
System.out.println("the key is " + myDesKey.toString());
desCipher.init(Cipher.DECRYPT_MODE, myDesKey); 

0 个答案:

没有答案