[英]crypt() not returning standard MD5 Hash?
我正在嘗試使用 C 中<crypt.h>
中的crypt()
函數,例如,當我嘗試對 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,第三部分是實際哈希 - $id$salt$hash
。 然而, helloworld
的實際標准 MD5 哈希值是fc5e038d38a57032085441e7fe7010b0
。 有沒有辦法使用crypt()
生成這個哈希? 非常感謝!
crypt()
的 glibc 實現返回的字符串不僅僅是編碼為 base 16 的 salt + 密碼的簡單散列。
如果您查看 MD5 版本 的源代碼,您將看到一個循環,該循環采用先前的 MD5 散列和散列,重復一千次。 然后它變成了一個字符串,重復使用名為__b64_from_24bit()
的函數,一次將最終 MD5 哈希的 3 個字節(不是線性順序)編碼為我假設的基數 64。
這就是為什么您看到的內容與md5sum
類的輸出完全不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.