簡體   English   中英

使用PHP對ASP.NET成員資格中的用戶進行身份驗證

[英]Using PHP to authenticate users in an ASP.NET membership

嘗試使用PHP對現有ASP.NET成員資格數據庫進行身份驗證時,我遇到了一些問題。 我在網上搜索過,我發現的現有答案似乎對我不起作用。 即:

public static function Hash($password, $salt)
{
  $decodedSalt = base64_decode($salt);
  $utf = mb_convert_encoding($password, 'UTF-16LE', 'UTF-8');
  return base64_encode(sha1($decodedSalt.$utf, true));
}

我認為問題的一部分是密碼哈希實際上不是用SHA-1計算的,因為數據庫中的值是44個字符長,base64編碼的字符串(這意味着輸入可能是256位長)。 我曾嘗試使用SHA-256代替SHA-1,但無濟於事。 我在web.config中找不到一個機器密鑰,它可以進一步腌制哈希值,當我在本地運行或在生產服務器上運行時,ASP.NET站點生成相同的哈希值,所以我不知道為什么它們不是不匹配。

Web.config成員資格提供程序:

<add connectionStringName="MySqlMembershipConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" autogenerateschema="true" name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, mysql.web" />

應該起作用的示例密碼:

$salt = 'Mu1tp8XzfKl8dSTVAZm44A=='; // Straight from the DB
$password = 'testing';
$expectedHash = 'TQN7m8OWIyBOKVwzegWSUBVq7o7+KWFBc46J+B77mLw=' // Straight from the DB

// When using the above Hash function with SHA-256 instead of SHA-1
$generatedHash = 'rpmTmtBfWoJz71ooQGQUIIyQJKd99qhYxMUI1yda0qE='

思考? 知道為什么我的哈希值與數據庫中存儲的內容不匹配(以及通過ASP.NET站點登錄時原因和方式如何)? 我已經嘗試更換哈希函數,反轉密碼/鹽連接,並在敲擊我的計算機時大聲喊叫,但這些似乎都沒有幫助。

我看了一下你鏈接到的身份驗證問題頁面,一個特別的答案引起了我的注意: https//stackoverflow.com/a/4227642/633098

因為你說使用的算法不再是SHA1,但更可能是SHA256我開始嘗試使用HMAC哈希,而不是SHA256。 它起初沒有用,但后來我嘗試使用由密碼和鹽組成的連接字符串和salt(= key)本身,並且它起作用。

這是我做的簡單功能:

function _hash($password, $salt) {
    return base64_encode(hash_hmac('sha256', base64_decode($salt) . iconv('UTF-8', 'UTF-16LE', $password), base64_decode($salt), true));
}

$salt = 'Mu1tp8XzfKl8dSTVAZm44A=='; // Straight from the DB
$password = 'testing';

var_dump(_hash($password, $salt));

結果哈希: TQN7m8OWIyBOKVwzegWSUBVq7o7 + KWFBc46J + B77mLw =

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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