【问题标题】:Trying to understand the MD5 algorithm试图理解MD5算法
【发布时间】:2009-04-12 17:44:11
【问题描述】:

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

I got the md5 algorithm here.

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

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

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

谢谢。

【问题讨论】:

    标签: c logic md5


    【解决方案1】:

    虽然我同意 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
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢。我试过你的代码,我得到了这个 -> é|╦♫ÛèplL4íhæ°N{ 我在控制台赢的 winxp 上运行这个。跟字符编码有关系吗?
    • 所以摘要是二进制的,换句话说,摘要数组包含 16 个字节的数据(不是 16 个字符),如果您希望它采用可打印格式,那么您可以使用此循环打印它输出为十六进制字符串: for (int di = 0; di
    【解决方案2】:

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

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

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

    【讨论】:

    • 我知道 C,但显然不是那么好:(
    • 嗯,这个想法同样适用于“让自己对一种我有一段时间没有使用过的语言进行刷新”。跑之前必须先走。
    【解决方案3】:

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

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

    编辑:如果您想要关于加密的优秀书籍(或资源),要充分响应,请查看 Bruce Schneier。 Applied Cryptography 是经典。

    【讨论】:

    • +1 我同意 MD5 和类似的算法很复杂。这些不是学习编程语言的最佳代码示例。
    • 感谢您的建议。我真的要重读 C 书并尝试再次掌握二进制和十六进制的东西
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2014-12-28
    • 2023-03-07
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多