c# - 将未加密的标签数据附加到加密文件

标签 c# xml encryption metadata

我希望这是我的问题的正确位置,因为肯定有不止一种方法可以做到这一点。

我有一个压缩和加密的文件格式 (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/

相关文章:

java - 使用 SAX 解析器解析 Xml

JAVA:如何加密和查看图像

c++ - 生成大小不是 16 的倍数的加密数据

c# - 我可以压缩 Response.write 吗?

xml - 无法在tomcat8 dockerfile上添加server.xml。 xml中的错误

C# - 通过公共(public)属性使私有(private)嵌套类可见

java - 从 XSD 删除命名空间引用生成类

c - 如何将这些字符沿字母表向下移动 3 个空格,而不进入字母表之外的其他字符?

c# - .Net 中的单元测试属性?

c# - Xml序列化-集合属性