![](/img/trans.png)
[英]JAVA: Socket override to use CipherInputStream and CipherOutputStream
[英]CipherOutputStream over a socket java
我有以下代码可以通过网络发送加密的数据:
s = new Socket(serverAddress, serverPort);
is = s.getInputStream();
os = s.getOutputStream();
Cipher decryptCipher = Cipher.getInstance("RSA");
decryptCipher.init(Cipher.DECRYPT_MODE, ClientSocket.clientPrivateKey);
cis = new CipherInputStream(is,decryptCipher);
Cipher encryptCipher = Cipher.getInstance("RSA");
encryptCipher.init(Cipher.ENCRYPT_MODE, this.serverPublicKey);
cos = new CipherOutputStream(os,encryptCipher);
该代码有效,但是当我尝试使用CipherOutputStream
通过网络发送加密的数据时,直到调用cos.close()
才发送数据,但是如果我关闭流,则会关闭网络连接。 使用CipherOutputStream
发送加密数据的正确过程是什么?
我解释代码的方式是,根据http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames ,密码被初始化为使用RSAES-PKCS1-v1_5加密一条消息。 html#Cipher “ RSA”指的是“ PKCS#1中定义的RSA加密算法”,我猜它指的是最古老的填充方案,应该是RSAES-PKCS1-v1_5 。 如果正确,则在读取整个消息(整个流)之前,流将无法产生部分结果。 另外,您也不能使用密码发送长消息(2048位RSA密钥应小于256个字节)。
我假设您要完成的工作是在两个端点之间创建安全连接? 如果是这样,那么您就不必理会所有这些低级别的加密技术并创建TLS连接。 尽管设置起来并不容易,但比从头开始建立安全的加密通信通道要容易得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.