我在這裏有點困惑。我有一個用戶的Drupal 7數據庫表,並帶有相應的密碼。所有這些密碼都被自然加密。我的假設是這些是MD5哈希,但不完全。Drupal 7密碼哈希
的這裏的挑戰是,我們正在利用同一組的用戶在使用類似的憑據,但不同的技術配套網站[請不要怪我,這我僅僅是棋子。
現在,如果我知道的Drupal如何去了解它的加密密碼,也許我可以對它們進行解密,並採用同樣的在我的後端邏輯?
我在這裏有點困惑。我有一個用戶的Drupal 7數據庫表,並帶有相應的密碼。所有這些密碼都被自然加密。我的假設是這些是MD5哈希,但不完全。Drupal 7密碼哈希
的這裏的挑戰是,我們正在利用同一組的用戶在使用類似的憑據,但不同的技術配套網站[請不要怪我,這我僅僅是棋子。
現在,如果我知道的Drupal如何去了解它的加密密碼,也許我可以對它們進行解密,並採用同樣的在我的後端邏輯?
注意,這些密碼是hashed,沒有加密。哈希和加密之間的根本區別在於,使用加密,您將能夠恢復原始密碼。當它們被散列時(不是沒有很多努力),你就無法做到這一點,這是設計。
土豆煎餅的想:如果你已經有了一個哈希棕色,你將無法得到原始土豆回來。這樣做是爲了防止黑客破壞系統並獲得對數據庫的訪問權限,從而無法查看或恢復原始密碼。
那麼如何檢查用戶是否輸入了正確的密碼?那麼,當用戶嘗試登錄並輸入密碼時,就會將相同的函數應用於用戶輸入,並查看輸出是否與存儲在數據庫中的內容相同。由於哈希函數爲deterministic,因此您將始終使用相同的輸入獲得相同的輸出。
的關鍵,越來越多的應用程序使用相同的散列工作是有試圖驗證用戶時,他們使用的密碼相同的功能。 Drupal可能也會使用一個或多個salts - 但這並不重要。只要應用程序使用相同的邏輯,散列將始終完全兼容。
假設Drupal使用這樣的事情作爲其身份驗證系統(非常簡化的僞代碼雜交):
/*
input: user-entered $username and $password
output: true if authorized, false otherwise
*/
function auth($username, $password)
{
$salt = 'some random salt';
// input is sanitized somewhere, somehow
$hash_from_db = db_result('SELECT hash FROM users WHERE username = "$username"');
$hashed_input = sha1($password . $salt);
if ($hash_from_db != $hashed_input)
return false;
else
return true;
}
如果您的其他應用程序使用同樣的事情到它的用戶進行身份驗證,它會正常工作。請注意,Drupal的身份驗證方案可能會複雜得多,但不要讓這讓你感到困惑。這只是關於做Drupal所做的同樣的事情。
爲Drupal,這裏的地方就可以開始:user_hash_password()
。
史詩!謝謝! – user1020069 2012-03-26 19:58:09
顯而易見的問題,有人 – user1020069 2012-03-26 21:12:18
答案是正確的,但要解決這個問題,我會先看看其他的可能性。有了drupal ususaly「有一個模塊」。例如。 http://drupal.org/project/oauth或核心OpenID模塊。 – 2012-06-09 09:35:45
您可以使用drupal方法檢查明文密碼是否有效,對於這個 user_check_password($ password,$ account)在includes/password.inc中。
我希望Drupal不使用普通的md5。 – CodesInChaos 2012-03-26 19:23:47
你將無法解密它們,但你應該能夠以相同的方式對它們進行哈希處理。 – CodesInChaos 2012-03-26 19:24:27
@CodeInChaos我非常懷疑Drupal甚至使用MD5。 – NullUserException 2012-03-26 19:38:58