我正在尝试用C语言使用MD5 (后者也尝试使用SHA1算法)做一些事情。我的主要问题是,我从来没有真正用C做过任何复杂的事情,只是简单的东西(不像指针或结构的指针)。
I got the md5 algorithm here.
我在我的C项目中包含了文件md5.c和md5.h (使用代码块),但唯一的问题是我并不真正了解如何使用它。我已经读了一遍又一遍代码,但我不明白如何使用这些函数将'example‘转换为MD5散列。
我已经有一段时间没有做C编程了(主要是php),所以我有点迷茫了。基本上我问的是一些用法的例子。它们是通过md5main.c文件提供的,但我不理解它们。
我的目标是不是很高?我应该停止这一切,重新开始阅读C书,或者有人能给我一些建议,看看我是否能弄明白这一点。
谢谢。
发布于 2009-04-12 18:43:31
虽然我同意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-12 17:52:46
你应该停止这一切,重新开始阅读C语言书籍。
我的经验是,当我试图学习一门新的编程语言时,同时尝试实现一个复杂的项目是不现实的。你应该用C语言做一些简单的练习,直到你熟悉了这门语言,然后再处理一些事情,比如实现MD5或者集成现有的实现。
顺便说一句,阅读代码是一种不同于编写代码的技能。这两种技能之间有差异,但都需要你很好地理解这门语言。
发布于 2009-04-12 18:15:40
我认为你选择了最糟糕的东西来看(不是你自己的错)。加密和散列类型的算法将以最奇怪的方式使用该语言来完成它们需要快速完成的类型的数学运算。它们几乎肯定是令人困惑和难以理解的。另外,你需要沉浸在数学中,才能真正理解它们。
如果你只是想要一个散列算法,那就得到一个众所周知的实现,并将其作为一个黑盒来使用。不要试图自己实现它,您几乎可以肯定会在实现中引入一些加密缺陷。
编辑:如果您想要关于加密的好书(或资源),请访问Bruce Schneier,以获得完整的响应。Applied Cryptography是一个经典的例子。
https://stackoverflow.com/questions/742096
复制相似问题