2013-03-01 42 views
3

所以,我有一個Linux的影子文件中的此項哈希用於UNIX隱蔽密碼文件

google.:$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/::1:0:1:1::: 

該用戶的密碼是com

據我瞭解$1$意味着它使用MD5散列; 8KdNUQ4R是鹽;而ZYyUXVGhvLgVNpfqus.GX/是散列密碼本身。

什麼讓我困惑的是,MD5發生器我在網上找到產生一個十六進制值長32個字符,但在這種情況下,哈希密碼是唯一的22個字符長,絕對不是一個十六進制。

使用給定的鹽,我必須通過哪些步驟從comZYyUXVGhvLgVNpfqus.GX/

編輯

所以,我發現我的答案。我的問題是我應該使用md5crypt而不是md5。

+0

通常情況並非如此簡單,您需要查看您的發行版正在使用什麼。這個問題可以幫助你:http://serverfault.com/questions/88284/how-is-a-password-hash-encoded-in-the-shadow-password-file – akostadinov 2013-03-01 19:33:20

+0

問題是我收到的唯一的影子文件我們可以找到儘可能多的密碼。我想到了從單詞列表中散列出來的單詞並對其進行比較。有沒有更好的方法來做到這一點? – Dzsek 2013-03-01 19:34:44

+0

似乎有很多工具用於破解影子文件,尤其是基於md5的影子文件。不太可能寫出比在合理時間框架內已有的更快的東西。沒有個人經驗..但聽起來像是浪費時間 – akostadinov 2013-03-01 19:39:20

回答

4

如果你需要計算哈希值特定的密碼使用的crypt(3):如果你想知道如何得到它

#include <iostream> 
#include <unistd.h> 

int main() 
{ 
    std::cout << crypt("com", "$1$8KdNUQ4R") << std::endl; 
    return 0; 
} 

- 鹽+密碼的MD5哈希的結果是通過的base64轉換成字符串。

[email protected]:~$ g++ crypt.cpp -lcrypt -o crypt_com 
sla[email protected]:~$ ./crypt_com 
$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/