我希望这是我的问题的正确位置,因为肯定有不止一种方法可以做到这一点。
我有一个压缩和加密的文件格式 (xml)。现在的问题是,我想将一些基本的未加密元数据附加到我的文件中,以便于访问某些参数。
是否有正确的方法来做我想做的事情,否则有哪些最佳实践需要牢记?
我现在考虑的方法是使用Bouncy Castle在 C# 中加密我的实际数据,同时将我的标记数据添加到文件的前面。
例如
<metadata>
//tag information about the file
</metadata>
<secretdata>
//Grandma's secret recipe
</secretdata>
只加密 secret 数据
<metadata>
//tag information about the file
</metadata>
^&RF&^Tb87tyfg76rfvhjb8
hnjikhuhik*&GHd65rh87yn
NNCV&^FVU^R75rft78b875t
最佳答案
这里的一个挑战是从文件的前面获取纯文本 XML,同时将输入流恰好留在加密和压缩数据的开头。由于 C# 中的 XML 读取库在构建时并未考虑到这种用法,因此它们可能表现不佳(例如,读取器可能读取的字节数超过其需要,从而使底层流超出加密数据的开头)。
一种可能的处理方法是在提供 XML 元数据长度的众所周知的格式中添加一个 header 。所以文件看起来像这样:
Header (5 bytes):
Version* (1 byte, unsigned int) = 1
Metadata Length** (4 bytes, unsigned int) = N
Metadata (N bytes):
well formed XML
Encrypted Data (rest of file)
(* - 在定义文件格式时包括版本控制总是一个好主意)
(** - 如果元数据的长度要超出 32 位 uint 的范围,则应考虑另一种解决方案。)
然后您可以直接读取 5 字节的 header ,解析出 XML 的长度,准确读取出那么多字节,输入流应该在正确的位置以开始解密和解压缩文件的其余部分。
当然,既然您已经有了一个二进制 header ,您可以考虑只将元数据放在 header 本身中,而不是将其放在 XML 中。
关于c# - 将未加密的标签数据附加到加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382917/