2012-05-15 30 views
0

服务器我如何正确初始化对象与密码

decCipher.init(Cipher.DECCRYPT_MODE, secretKey); 
    ois = new ObjectInputStream(new CipherInputStream(socket.getInputStream(),decCipher)); 
    encCipher.init(Cipher.ENCRYPT_MODE, secretKey); 
    out = new ObjectOutputStream(new CipherOutputStream(socket.getOutputStream(),encCipher)); 

客户端(不同的应用)流:

Ë

ncCipher.init(Cipher.ENCRYPT_MODE, secretKey); 
obj_out = newObjectOutputStream(new CipherOutputStream(socket.getOutputStream(),encCipher)); 
decCipher.init(Cipher.DECRYPT_MODE, secretKey); 
obj_in = new ObjectInputStream(new CipherInputStream(socket.getInputStream(),decCipher) 

OIS在服务器应用程序在创建threws异常流。如何解决它?当这不包裹在密码流中一切正常。

new ObjectInputStream正在创建,但它冻结10秒(超时),并超时限制达到时,抛出异常不会抛出异常。

例外:

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2298) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2767) 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:798) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) 
+0

请提供更完整的代码片段。你有单独的desCipher对象,还是你可能重用了你不应该使用的对象?请提供更长的回溯。你的服务器和客户端是否正确地分成两个线程?请更加耐心。 –

+0

我已更新代码,但我不知道如何正确格式化。对不起, – user1306777

+0

不要*重用* desCipher对象!我想它不能被初始化为同时加密和解密! –

回答

0

您需要使用两个不同的Cipher对象,一个用于加密,一个用于解密。考虑将您的Cipher对象附加到CipherInputStream后的模式在放入ENCRYPT_MODE之后。

+0

两个不同的密码对象没有任何变化。我也尝试过所有与ENCRPT/DECRYPT MODE的组合,但仍然一样。 – user1306777

+0

@ user1306777 CipherInputStream在DECRYPT模式下需要一个密码。 CipherOutputStream在ENCRYPT模式下需要一个密码。创建流时,您只需要每次初始化它们一次。 – EJP

+0

EJP仍然没有工作,或者我没有得到你。我更新了产生异常的代码。 – user1306777