2

ASP サイトを PHP に変換する作業を行っています。このサイトはサードパーティの API を使用しています。サードパーティ API には、データベースに保存されたユーザー ID と各ユーザーのパスワードが必要です。ASP サイトはパスワードをデータベースに保存せず、代わりに次の関数を使用して毎回 UserID に基づいてパスワードを取得していました。

public static string GetLmsUserPassword(int userId)
{
    var hash = userId.ToString().MD5();
    return hash.Substring(15, 4) + hash.Substring(4, 4);
} 

PHPでは、次のように記述しました。

function lms_password($user_id) {
    $hash = md5((int)$user_id);
    $password = substr($hash,15,4).substr($hash,4,4);
    return $password;
}

ただし、PHP で生成されたパスワードが ASP のパスワードと一致しないようです。ASPがmd5を別の方法で行うかどうか疑問に思っていますか?

UserID の例は、実際には数字ではなく文字列です: 22E21F5D-7979-467E-928D-4EFCC323BDCB

4

2 に答える 2

1

.NET バージョンと PHP バージョンの結果の違いは、それぞれが文字列を int にキャストする方法が原因である可能性があります。例の ID を両方にキャストしてみて、比較してください。

于 2012-12-06T19:05:43.720 に答える
1

ASP:var hash = userId.ToString().MD5();

そのToString()部分が見えますか?これは、ID がおそらく文字列として解釈されていることを意味します。

あなたのPHP:$hash = md5((int)$user_id);

明示的に int としてキャストすると、完全に異なる値にハッシュされます。

UserID の例は、実際には数字ではなく文字列です: 22E21F5D-7979-467E-928D-4EFCC323BDCB

だから...なぜあなたはそれをintとしてキャストしているのですか?:私

編集:パスワードがユーザーIDのハッシュから静的に生成されているように見えることも気に入っています。非常に安全です。

于 2012-12-06T20:19:03.273 に答える