加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java通过套接字发送加密文件

发布时间:2020-12-14 19:14:27 所属栏目:Java 来源:网络整理
导读:我一直在尝试编写一个小文件服务器.我得到了文件传输的好处,但现在我已经尝试添加加密奇怪的事情正在发生.我正在尝试使用密码输入/输出流来使用DES加密来发送文件.该文件似乎完全由服务器传输,但我无法让客户端正确接收它. 无论我传输什么类型的文件,客户端

我一直在尝试编写一个小文件服务器.我得到了文件传输的好处,但现在我已经尝试添加加密奇怪的事情正在发生.我正在尝试使用密码输入/输出流来使用DES加密来发送文件.该文件似乎完全由服务器传输,但我无法让客户端正确接收它.

无论我传输什么类型的文件,客户端都不会离开我用来接收文件的循环.即便如此,我还是设法收到.pdf和.doc文件,这些文件似乎都没有任何错误,并且完全打开.当我发送图像时,结果似乎没有正确通过.图像打开,但结束永远不会显示,只是一个灰色的区域.

我认为这些问题是相关的,但我不知道如何修复它们.

这是我用来在服务器端发送文件的代码:

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,publicKey);
CipherOutputStream cipherOut = new CipherOutputStream(outToClient,cipher);
byte[] fileBuffer = new byte[BUFFER_SIZE];
InputStream fileReader = new BufferedInputStream(new FileInputStream(aFile));
int bytesRead;
while((bytesRead = fileReader.read(fileBuffer)) != EOF){
    cipherOut.write(fileBuffer,bytesRead);
}
cipherOut.flush();

以及在客户端接收它的代码:

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE,serverPublicKey);
CipherInputStream cipherIn = new CipherInputStream(inFromServer,cipher);

byte[] fileBuffer = new byte[BUFFER_SIZE];
FileOutputStream fileWriter = new FileOutputStream(newFileName);
int bytesRead;
while((bytesRead = cipherIn.read(fileBuffer)) != EOF){
    fileWriter.write(fileBuffer,bytesRead);
}
fileWriter.flush();
fileWriter.close();

任何正确方向的指针都是超级的.

最佳答案
  while((bytesRead = cipherIn.read(fileBuffer)) != EOF){

只是继续阅读,直到’bytesRead’的数量给你EOF,但这不会发生,因为你没有关闭套接字(至少不是我能看到你的代码)在另一端.

我知道了

cipherOut.flush() ;

但这不会关闭套接字.如果它只是“超出范围”,它将不会关闭,直到垃圾收集器收获对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读