8

私はC#でハッシュアルゴリズムを持っています。一言で言えば、それは次のとおりです。

string input = "asd";

System.Security.Cryptography.MD5 alg = System.Security.Cryptography.MD5.Create();
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();


byte[] hash = alg.ComputeHash(enc.GetBytes(input));
string output = Convert.ToBase64String(hash);

// outputs:   eBVpbsvxyW5olLd5RW0zDg==
Console.WriteLine(output);

次に、この動作を php で複製する必要があります。

$input = "asd";
$output = HashSomething($input);
echo $output;

どうすれば達成できますか?

私がチェックしました

  • md5
  • utf8_decode
  • utf8_encode
  • base64_encode
  • base64_decode
  • url_decode

しかし、php md5が最後に==を取得しないことに気付きました...何が欠けていますか?

: C# の動作は既に実装されており、パスワードはこのアルゴリズムでデータベースに保存されているため、変更できません。

4

6 に答える 6

20

問題は、PHP のmd5()関数がデフォルトでハッシュの 16 進数のバリエーションを返すことです。C# は未加工のバイト出力を返しますが、これを base64 エンコーディングでテキスト セーフにする必要があります。PHP5 を実行している場合は、base64_encode(md5('asd', true)). 2 番目のパラメーターmd5()が true であることに注意してください。これによりmd5()、16 進数ではなく生のバイトが返されます。

于 2009-05-04T20:19:24.837 に答える
5

PHP で md5 ハッシュを base64 エンコードすることを覚えていましたか?

$result = base64_encode(md5($password, true));

2 番目のパラメーターは、md5 が生の出力を返すようにします。これは、C# で使用している関数と同じです。

于 2009-05-04T20:16:37.790 に答える
4

C# コードは文字列から UTF8 バイトを取得します。md5 を計算し、base64 エンコードとして保存します。したがって、php でも同じことを行う必要があります。

$hashValue = base64_encode(md5(utf8_decode($inputString)))
于 2009-05-04T20:18:36.413 に答える
1

phpの場合は次のようになります

 php -r "echo base64_encode(md5(utf8_encode('asd'),true));"
于 2012-03-22T15:25:40.030 に答える
0

私は同じ問題を抱えていました... md5($myvar) だけを使用するとうまくいきました。C# と PHP で同じ結果が得られます。

于 2010-03-09T10:04:43.837 に答える
-1

投稿されたGavin Kendallが助けてくれました。これが他の人に役立つことを願っています。

http://jachman.wordpress.com/2006/06/06/md5-hash-keys-with-c/

public static string MD5Hash(string text)
{
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    return System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(md5.ComputeHash(ASCIIEncoding.Default.GetBytes(text))), “-”, “”);
}
于 2012-02-09T17:06:38.687 に答える