android:将大字符串转换为字节并通过网络发送是否安全?

时间:2018-12-19 00:05:57

标签: java android smbj

我得到一个文件,然后将其转换为字符串并替换一些单词。

使用此字符串,我运行以下命令:

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文件类型以单词形式打开该文件。

我只是担心由于文件大小而导致此方法损坏。

上述方法是否安全实践,我还能采取其他方法吗?

1 个答案:

答案 0 :(得分:1)

  

将大字符串转换为字节并通过网络发送是否安全?

这取决于。 (没有什么是绝对安全的。永远。)


  

由于文件大小,我只是担心此方法会导致损坏。

大文件大小不会导致损坏。

但是,在两种情况下,大文件可能会出现问题:

  1. 如果文件的接收者无法或不愿意接受超过特定大小的文件,则它可能会截断该文件。如果未将其报告给发件人,则表明您有潜在的腐败来源。

  2. 网络数据包通常使用基于CRC的简单错误检测机制来检测在传输过程中被网络错误损坏的数据包。多位损坏有可能(以非常低的概率 1 )未被检测到。例如,如果在TCP流的顶部实现文件传输,则文件损坏的可能性很小。

1-实际错误率很难预测,但是如果您传输的是TB级数据,则由于未检测到的网络错误而导致损坏的可能性变得很大。


  

上述方法是否安全实践,我还能采取其他方法吗?

鉴于您无法防止以上两种情况之一,您需要一种方法来绝对确保大文件传输不会损坏文件。通常,这是通过以下方式完成的:

  1. 正在检查文件大小...仅检测截断
  2. 计算和比较文件散列/校验和。如果您使用带有N位的校验和,则未被检测到的随机损坏的可能性是2 ^ N。

请注意,以上内容与文件类型无关。

我了解有一些标准方法可以在XML文件的内容上添加强大的数字签名。检查这样的签名也将有助于检测意外损坏。