gpt4 book ai didi

java - 通过套接字发送加密文件

转载 作者:行者123 更新时间:2023-12-01 14:37:58 25 4
gpt4 key购买 nike

我在通过套接字发送加密文件(客户端-服务器通信)时遇到一些问题。我认为这是与流相关的问题(更具体地说,流的排列似乎相当复杂,因为我正在从对象输入/输出流创建数据输入/输出流,然后从这些流中加密输入/输出流) ...

客户端:

private static void sendEncrypted(FileInputStream fis,DataOutputStream dos)throws Exception{

try {
byte[] data = new byte[1024];

CipherOutputStream cos = new CipherOutputStream(output, c);

makeFileHeader(dos, c, key, sig);

int i = fis.read(data);

while(i != -1){
cos.write(data, 0, i);
sig.update(data);
cos.flush();
i = fis.read(data);
}
cos.close();
fis.close();

byte[] signatureObj = sig.sign();

output.writeObject(signatureObj);

} catch (Exception e) {
System.out.println(e.toString());
}
}

dos - 从原始 objectoutputstream 创建(输出,从套接字创建)makefileheader - 创建对象并使用输出将其写入的方法

服务器端:

private static void receiveFiles(DataInputStream dis,FileOutputStream fos, int size) throws IOException{

byte [] b = new byte[1024];
int read = 0;
int offset;
while(read < size){
offset = input.read();
dis.read(b,0,offset);
fos.write(b,0,offset);
read +=offset;
}

}

最佳答案

添加此答案,以便可以关闭问题:

我看到您在关闭在输出之上创建的 cos 后直接在输出上写入。这不可能。

来自 CipherOutputStream.close() 的文档:“该方法调用封装的 cipher 对象的 doFinal 方法,这会导致封装的 cipher 缓冲的任何字节都被处理。结果通过调用此输出流。此方法将封装的密码对象重置为其初始状态并调用底层输出流的 close 方法。”

关于java - 通过套接字发送加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com