問題描述
Possible Duplicate:
How to validate WordPress generated password in DB using PHP?
我正在使用與 WordPress 完成的網站,我需要添加一些 WP 以外的部分,並檢查用户登錄,但我無法找到 WP 在密碼寫入 DB 之前如何加密密碼…
我試過 md5 但不是…
有沒有人知道如何檢查 WP 外的密碼,而不使用它的插件/檢查器,清除 PHP 代碼?
最佳解決方案
密碼加密庫位於/wp-includes/class-phpass.php 。它是 Portable PHP Password hashing framework 。
次佳解決方案
這聽起來像是要使用外部代碼來驗證 WP 數據庫的用户名/密碼。如果這是正確的,你將花費大量的時間重塑輪子。但是,關於如何使用直接 PHP 的一個很好的例子,看一下已經做到的核心 WP 功能是一個好主意。
例子,`wp_check_password()’:
function wp_check_password($password, $hash, $user_id = '') {
global $wp_hasher;
// If the hash is still md5...
if ( strlen($hash) <= 32 ) {
$check = ( $hash == md5($password) );
if ( $check && $user_id ) {
// Rehash using new hash.
wp_set_password($password, $user_id);
$hash = wp_hash_password($password);
}
return apply_filters('check_password', $check, $password, $hash, $user_id);
}
// If the stored hash is longer than an MD5, presume the
// new style phpass portable hash.
if ( empty($wp_hasher) ) {
require_once ( ABSPATH . 'wp-includes/class-phpass.php');
// By default, use the portable hash from phpass
$wp_hasher = new PasswordHash(8, TRUE);
}
$check = $wp_hasher->CheckPassword($password, $hash);
return apply_filters('check_password', $check, $password, $hash, $user_id);
}
首先,WordPress 檢查用户的散列密碼是否仍然使用 old-school MD5 進行安全。這是為了保持更新的向後兼容性。如果密碼為 MD5,則 WordPress 將使用新系統 (調用 wp_set_password()) 自動將其替換為新散列。如果不是 MD5,則 WP 移動到較新的哈希設置。
首先,我們包括便攜式 PHP 散列框架 (在另一個答案中已經由 @John Watson 提到),並創建了一個實例,將其存儲在全局 $wp_hasher 變量中。
然後,我們使用庫的 CheckPassword()方法傳遞明文密碼和哈希值來對其進行驗證。
如果要在外部庫中使用,您必須首先使用 include /require 庫,然後將其實例化,然後傳入純文本密碼及其哈希值。所以一些未經測試的 psuedo-code …
function validate_password( $plaintext, $hash ) {
require_one( 'class-phpass.php' );
$hasher = new PasswordHash(8, TRUE);
return $hasher->CheckPassword( $plaintext, $hash );
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。