【问题标题】:How to encrypt & decrypt multiple files to one file?如何加密和解密多个文件到一个文件?
【发布时间】:2018-07-11 08:47:51
【问题描述】:

作为标题, 我想把10个文件加密成一个文件,扩展文件可以自定义。加密后,我将自动解密它以创建 10 个文件。有人有什么想法吗?

【问题讨论】:

  • 关键问题是你打算怎么做。您尝试过哪些不起作用的方法,我们可以从那里构建?一旦它们在单个输出文件中,您将如何定义各种源文件的边界以便准确解密它们?您是否要先加密它们然后压缩它们等?需要更多信息
  • 受密码保护的 zip 或 7z 文件?
  • @Fabulous 我正在寻找解决方案,以便在解密时我们可以有迹象表明它们分成了原始文件。
  • @AdamG 不,我将自定义文件扩展名,在这种情况下不使用 zip 或 7z。
  • zip 或 7z 文件不需要具有 .zip 或 .7z 扩展名。如果你愿意,就叫它 .Adam。

标签: c# encryption compression data-processing file-structure


【解决方案1】:

就像您无法识别消息的任何其他流一样,您需要某种分隔符。预先添加内容的长度是一种常见的方法。

所以组成一个文件格式规范,例如:

  • uint32 开始文件,指定存档中的文件数
  • 然后,每个文件:
    • 写一个uint32,以字节为单位指定您要使用的编码的文件名长度(我会选择UTF-8)
    • 写入文件名的字节
    • 写一个uint32指定文件数据长度
    • 写入文件数据

然后在读取文件时,读取 uint 并提取下一个字节。

但您通常不想发明自己的文件格式。

【讨论】:

  • 谢谢,但是如果用户给了我带有 data.enc 的文件(示例数据),我该如何将它们拆分为多个文件?因为不知道符号(每个文件的长度,有多少个文件?)。
  • 是的,因为您在创建文件时将其写入了文件中。
【解决方案2】:

可能的解决方案

  • 加密所有文件
  • 将加密数据 (byte[]) 存储在 List<byte[]> 中或单独存储在临时文件中(可能是 file.oldext.newext.tmp)
  • 创建一个新的 XML 文件,将所有数据写入其中(在 XML 文件中创建一个列表并将数据存储在列表元素中;每个文件一个元素)
  • 将 XML 文件保存到磁盘 (newfilename.newext)

【讨论】:

  • 哦,谢谢,但是我如何读取这个文件(newfilename.newext)?你的意思是:替换.newext,它会变成newfilename.xml?!
  • XML 文件不必采用 .xml 格式。它们也可以是 . 只需在您的代码中实现它即可将其作为 xml 文件读取。解密也是通过读取 XML、分离项目和解密它们。
  • 哦。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多