代码之家  ›  专栏  ›  技术社区  ›  AntonioCS

试图理解md5算法

  •  1
  • AntonioCS  · 技术社区  · 16 年前

    我试图用c语言对md5做些什么(后者试图用sha1算法做些什么)。我的主要问题是,我从来没有在C语言中真正做过任何复杂的事情,只是简单的事情(没有什么像指向指针或结构的指针那样)。

    I got the md5 algorithm here.

    我包括了文件 md5.c md5.h 在我的c项目中(使用代码块),但唯一的问题是我不知道如何使用它。我已经阅读并重新阅读了代码,我不明白如何使用这些函数将“example”转换为md5散列。

    我已经有一段时间没有做过c编程了(主要是php),所以我有点迷路了。 基本上我要求的是一些用法的例子。它们是通过 md5main.c 但我不明白。

    我的目标是高吗?我应该停止这一切,重新开始读C语言的书,或者有人能给我一些提示,看看我能不能搞清楚。

    谢谢。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Onorio Catenacci    16 年前

    虽然我同意比尔的观点,但如果你想真正理解你在做什么,你应该回到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
  •  5
  •   Bill Karwin    16 年前

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

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

    顺便说一下,阅读代码是一种不同于编写代码的技能。这两种技能是有区别的,但都要求你能很好地理解这门语言。

        3
  •  2
  •   JP Alioto    16 年前

    我认为你挑了最不好看的东西(不是你自己的错)。加密和散列类型算法将使最奇怪的语言使用成为可能,使他们能够快速完成所需的数学类型。它们几乎肯定是模糊不清的,难以理解。另外,你需要陷入数学的泥潭才能真正理解它们。

    如果你只想要一个散列算法,那么就得到一个著名的实现,并将其用作一个黑盒。不要自己尝试实现它,您几乎肯定会在实现中引入一些加密弱点。

    编辑:要完全响应如果你想要伟大的书籍(或资源)加密,看看布鲁斯施奈尔。 Applied Cryptography 是个经典。