2011-09-15 6 views
0

ASPサイトのユーザーアカウントをDrupalに移行する際に、いくつか問題が発生しています。ASPからPHPへのパスワード認証の移行

ASPサイトはHashEncode(パスワード+塩)によって、パスワードのハッシュを作成し

私は、私たちのDrupalパスワードモジュールでそれを一致させることができるようにPHPで同等の機能である把握しようとしています。

誰かがまともな試みをhttp://forums.overclockers.com.au/showthread.php?t=632736&page=2でしましたが、うまくいきません。

私はHashEncodeがsha1だと聞きましたが、これは当てはまりません。別のサイトでは、2つの出力が同じではないことを示し、私は自分のローカルのPHP部分を確認しました。

HashEncode("ABCD") = A11D4F0A70B882D58494B188DA0430CF4F17CFA8 

sha1('ABCD') = fb2f85c88567f3c8ce9b799c7c54642d0c7b41f6 

誰もがASP HashEncodeが動作し、私はユーザー間で移行できるように、どのように私はPHPでそれを再現することができます方法を知っていますか?

ありがとうございます!

答えて

-1

あなたがリンクしているフォーラムで既に述べたように、HashEncode関数のソースコードを見つけて、そこで何が起こっているのかを確かめてみてください。 多分、ASPはSHA2を使用しています。複数のキー長を持つことができます(SHA256/SHA512など)。

しかしユーザーが新しいソフトウェアでそれらを再作成する必要があるので、あなたはも、すべてのパスワードを削除することができます。このようにして、すべてのパスワードはPHPの関数を使って生成されます。 SHA256 +塩を使用して

例:

/** 
* generate salted password 
* @param string $plainTextPassword 
* @param string $salt default = NULL (create new salt) 
* @param int $saltLength default = 9 
* @return string password-hash 
*/ 
function passwordHash($plainTextPassword, $salt = null, $saltLength = 9) 
{ 
    if(is_null($salt)) 
    { 
     // create new salt 
     $salt = substr(sha1(uniqid(mt_rand(), true)), 0, $saltLength); 
    } 
    else 
    { 
     $salt = substr($salt, 0, $saltLength); 
    } 
    return $salt . hash('sha256', $salt . $plainTextPassword); 
} 
+0

私はMacで開発しており、ASPを持っていないので、簡単にソースコードを調べることはできません。歓声 – Nick

+0

私はASPで一度も働いたことがありません、検索エンジンを試してみてください... – feeela

0

それは通常HMACSHA1ハッシュだが、トリックはそのUTF16をコードしていることを確認することです。以下は、JavaScriptの実装です。

function str2rstr_utf16le(input) { 
    var output = [], 
     i = 0, 
     l = input.length; 

    for (; l > i; ++i) { 
    output[i] = String.fromCharCode(
     input.charCodeAt(i)  & 0xFF, 
     (input.charCodeAt(i) >>> 8) & 0xFF 
    ); 
    } 

    return output.join(''); 
} 

//utf 16 encoding is important 
var pwd = str2rstr_utf16le("test"); 
var hash = CryptoJS.HmacSHA1(pwd, pwd); 

var encodedPassword = CryptoJS.enc.Base64.stringify(hash); 
alert(encodedPassword); 
関連する問題