[我正在尝试使用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
生成此哈希?非常感谢!
crypt()
的glibc实现返回的字符串不仅是编码为base 16的salt +密码的简单哈希。
[如果您查看MD5版本的crypt()
,您将看到一个循环,该循环将以前的MD5哈希并对其进行哈希处理,重复一千次。然后,通过重复使用名为the source code的函数将其变成字符串,该函数一次将3个字节的最终MD5哈希编码(不是线性顺序)编码为我认为是基数64。