1

我正在尝试用 MD5 在 C 中做一些事情(后者试图用 SHA1 算法做一些事情)。我的主要问题是我从来没有真正在 C 中做过任何复杂的事情,只是简单的东西(不像指向指针或结构的指针)。

我在这里得到了 md5 算法。

我将文件包含在我md5.cmd5.hC 项目中(使用代码块),但唯一的问题是我并不真正了解如何使用它。我已经阅读并重新阅读了代码,但我不明白如何使用这些函数将“示例”转换为 MD5 哈希。

我有一段时间没有做过 C 编程(主要是 php),所以我有点迷失了。基本上我要问的是一些使用示例。它们是通过md5main.c文件提供的,但我不明白。

我在这里的目标很高吗?我是否应该停止这一切并重新开始阅读 C 书,或者任何人都可以给我一些指示,看看我是否能解决这个问题。

谢谢。

4

3 回答 3

5

你应该停止这一切,重新开始阅读 C 书。

我的经验是,当我尝试学习一门新的编程语言时,同时尝试实现一个复杂的项目是不切实际的。您应该在 C 中进行简单的练习,直到您熟悉该语言,然后处理诸如实现 MD5 或集成现有实现之类的事情。

顺便说一句,阅读代码是一种不同于编写代码的技能。这两种技能之间存在差异,但都需要您很好地理解语言。

于 2009-04-12T17:52:45.700 回答
5

虽然我同意 Bill 的观点,但如果你想真正了解你在做什么,你应该回到 C 书。但是,为了提供帮助,我修改并注释了 md5main.c 中的一些代码......

const char* testData = "12345";  // this is the data you want to hash
md5_state_t state;  // this is a state object used by the MD5 lib to do "stuff"
                    // just treat it as a black box
md5_byte_t digest[16];  // this is where the MD5 hash will go

// initialize the state structure
md5_init(&state);

// add data to the hasher
md5_append(&state, (const md5_byte_t *)testData, strlen(testData));

// now compute the hash
md5_finish(&state, digest);

// digest will now contain a MD5 hash of the testData input

希望这可以帮助!

于 2009-04-12T18:43:31.303 回答
2

我认为你选择了最糟糕的东西(不是你自己的错)。加密和散列类型算法将尽可能以最奇怪的方式使用语言来完成他们需要快速完成的数学类型。它们几乎肯定会被混淆并且难以理解。另外,您需要陷入数学困境才能真正理解它们。

如果您只想要一个哈希算法,请获得一个众所周知的实现并将其用作黑匣子。不要尝试自己实现它,您几乎肯定会在实现中引入一些加密弱点。

编辑:如果您想要关于加密的好书(或资源),要完全响应,请查看 Bruce Schneier。 应用密码学是经典之作。

于 2009-04-12T18:15:40.323 回答