我得到一个文件,然后将其转换为字符串并替换一些单词。
使用此字符串,我运行以下命令:
com.hierynomus.smbj.share.File remoteSmbjFile = share.openFile(fileName, EnumSet.of(AccessMask.GENERIC_WRITE), null, s, null, null);
byte[] myFile= template.getBytes("UTF-8");
ByteArrayInputStream bs = new ByteArrayInputStream(myFile);
try (OutputStream outputStream = remoteSmbjFile.getOutputStream();) {
byte[] buffer = new byte[1024];
int length;
while ((length = bs.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
}
该文件在网络位置创建,并且很好(没有问题)。 该文件本身是.xml类型,大小为2-10 MB。
如果文件中有一个字符,我将使用xml文件类型以单词形式打开该文件。
我只是担心由于文件大小而导致此方法损坏。
上述方法是否安全实践,我还能采取其他方法吗?
答案 0 :(得分:1)
将大字符串转换为字节并通过网络发送是否安全?
这取决于。 (没有什么是绝对安全的。永远。)
由于文件大小,我只是担心此方法会导致损坏。
大文件大小不会导致损坏。
但是,在两种情况下,大文件可能会出现问题:
如果文件的接收者无法或不愿意接受超过特定大小的文件,则它可能会截断该文件。如果未将其报告给发件人,则表明您有潜在的腐败来源。
网络数据包通常使用基于CRC的简单错误检测机制来检测在传输过程中被网络错误损坏的数据包。多位损坏有可能(以非常低的概率 1 )未被检测到。例如,如果在TCP流的顶部实现文件传输,则文件损坏的可能性很小。
1-实际错误率很难预测,但是如果您传输的是TB级数据,则由于未检测到的网络错误而导致损坏的可能性变得很大。
上述方法是否安全实践,我还能采取其他方法吗?
鉴于您无法防止以上两种情况之一,您需要一种方法来绝对确保大文件传输不会损坏文件。通常,这是通过以下方式完成的:
请注意,以上内容与文件类型无关。
我了解有一些标准方法可以在XML文件的内容上添加强大的数字签名。检查这样的签名也将有助于检测意外损坏。