【问题标题】:CipherOutputStream over a socket java通过套接字 java 的 CipherOutputStream
【发布时间】:2014-04-11 17:00:24
【问题描述】:

我有这段代码可以通过网络发送加密数据:

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 发送加密数据的正确流程是什么?

【问题讨论】:

    标签: java sockets encryption outputstream


    【解决方案1】:

    我解释代码的方式是初始化密码以使用RSAES-PKCS1-v1_5 加密一条消息,因为根据http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Cipher,“RSA”指的是“PKCS #1 中定义的 RSA 加密算法”,我猜指的是最古老的带有填充方案的实现,应该是RSAES-PKCS1-v1_5。如果这是正确的,则在读取整个消息(整个流)之前,流无法产生部分结果。此外,您应该无法使用密码发送长消息(使用 2048 位 RSA 密钥,应小于 256 字节)。

    我假设您要完成的是在两个端点之间创建安全连接?如果是这样,那么您不应该为所有低级加密而烦恼并创建 TLS 连接。尽管设置起来并不简单,但它仍然比从头开始构建安全的加密通信通道要容易得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2014-03-25
      • 2014-01-11
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多