簡體   English   中英

crypt() 不返回標准的 MD5 哈希?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM