我正在编写一个解析 eCryptfs 文件头的程序(使用 Free Pascal,而不是 C)。
标头中的值之一从字节 7 开始,到 15 结束(一个 8 字节值)。它对我有用,因为它是一个将文件唯一标识为 eCryptfs 文件的值。因此,我正在尝试编写我的应用程序以在它在文件中找到此类值时识别它。
但是,标记本身是通过将随机生成的 4 字节值 (X) 与另一个 4 字节静态十六进制值 0x3c81b7f5 (Y) 进行异或运算而生成的。生成的值是 4 个字节,Z。X + Z 一起构成了 8 个字节的特殊标记。Y 本身不存储在文件头中。因此,由于值 0x3c81b7f5 (Y) 从未存储在标头中,因此我无法编写应用程序来查找它,并看到其他 4 个字节是一个静态值与另一个随机值的异或结果,我无法弄清楚它是如何被识别的。
在询问 eCryptfs 程序如何在 eCryptfs Launchpad 站点(https://answers.launchpad.net/ecryptfs/+question/152821 )上将此值识别为“eCryptfs 文件”后,其中一个社区向我推荐了相关的 C 源代码我在下面链接到它。但是,我对 C 的理解不够好,无法弄清楚它是如何识别特殊标记的。谁能帮助我,以便我可以将相同类型的识别过程编码到我自己的应用程序中?我没有我不想要源代码,但我只想有人解释 C 代码是如何工作的“啊,是的,那是一个 eCryptfs 文件!”所以我知道我需要编写我的应用程序来做什么。
http://fxr.watson.org/fxr/source/fs/ecryptfs/crypto.c?v=linux-2.6;im=excerpts#L1029