试图了解MD5算法

时间:2009-04-12 17:44:11

标签: c logic md5

我正在尝试使用MD5在C中执行某些操作(后者尝试使用SHA1算法执行某些操作)。我的主要问题是我从来没有在C中做任何复杂的事情,只是简单的东西(没有像指针或结构的指针)。

I got the md5 algorithm here.

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

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

我的目标是什么?我应该停止这一切并再次开始阅读C书,或者任何人都可以给我一些指示,看看我是否能解决这个问题。

感谢。

3 个答案:

答案 0 :(得分:5)

你应该停止这一切并再次开始阅读C书。

我的经验是,当我尝试学习一种新的编程语言时,尝试同时实现一个复杂的项目是不切实际的。你应该用C语言进行简单的练习,直到你对语言感到满意为止,然后解决类似实现MD5或集成现有实现的问题。

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

答案 1 :(得分:5)

虽然我同意比尔的意见,但如果你想真正理解你在做什么,你应该回到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

希望这有帮助!

答案 2 :(得分:2)

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

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

编辑:如果你想要加密的好书(或资源),要完全响应,请看Bruce Schneier。 Applied Cryptography是经典之作。