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

android: Is it safe practice to convert a large string to bytes and send across the network?

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

我用这个字符串 运行 以下内容:

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 文件类型在 word 中打开此文件,如果有一个字符关闭,文件将损坏。

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

上述方法是否安全,还有其他我可以采用的方法吗?

Is it safe practice to convert a large string to bytes and send across the network?

视情况而定。 (没有什么是绝对安全的。永远。)


I'm just worried due to the files size this method will cause a corruption.

大文件不会导致损坏。

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

  1. 如果文件的接收者不能或不愿意接受超过一定大小的文件,那么它可能会截断文件。如果没有将此报告给发件人,则说明您有潜在的损坏来源。

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

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


Is the above method safe practice are there any other approaches I could take?

鉴于您无法避免上述任何一种情况,您需要一种方法来绝对确保大文件传输没有损坏文件。通常这是通过以下方式完成的:

  1. 正在检查文件大小...仅检测截断
  2. 正在计算和比较文件哈希/校验和。如果您使用 N 位校验和,未检测到 随机损坏的几率是 2^N 分之一。

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

我知道有一些标准方法可以在 XML 文件的内容上放置强数字签名。检查这样的签名也可以用来检测意外损坏。