crypt()不返回标准MD5哈希?

问题描述 投票:0回答:1

[我正在尝试使用C的crypt()中的<crypt.h>函数,例如,当我尝试对MD5中的字符串进行哈希处理时,它返回的内容与标准的MD5哈希所产生的结果不同,例如md5sum。示例/证明:

hash.c:

#include <stdio.h>
#include <crypt.h>

#define MD5 "$1$"

int main() {

        const char string[] = "helloworld";
        char * hash = crypt(string, MD5);

        printf("%s\n",hash);

        return 0;
}

我用gcc -o hash hash.c -lcrypt编译并运行:

./hash
$1$$edK86ZB1Vvaz2eneY.itb.

据我对UNIX系统的了解,crypt的输出格式与UNIX用户的密码格式匹配,而第一部分是哈希ID /类型,第二部分是salt,第三部分是实际的哈希-[C0 ]。而$id$salt$hash的ACTUAL标准MD5哈希为helloworld。有什么方法可以使用fc5e038d38a57032085441e7fe7010b0生成此哈希?非常感谢!

c unix hash crypt
1个回答
0
投票

crypt()的glibc实现返回的字符串不仅是编码为base 16的salt +密码的简单哈希。

[如果您查看MD5版本的crypt(),您将看到一个循环,该循环将以前的MD5哈希并对其进行哈希处理,重复一千次。然后,通过重复使用名为the source code的函数将其变成字符串,该函数一次将3个字节的最终MD5哈希编码(不是线性顺序)编码为我认为是基数64。

© www.soinside.com 2019 - 2024. All rights reserved.