1

以下のコードから C# ハッシュを PHP に複製する必要があります。私は検索してきましたが、これまでのところ解決策が見つかりませんでした。

md5ハッシュ文字列の作成に関するこの記事から:

using System;
using System.Text;
using System.Security.Cryptography;

// Create an md5 sum string of this string
static public string GetMd5Sum(string str)
{
    // First we need to convert the string into bytes, which
    // means using a text encoder.
    Encoder enc = System.Text.Encoding.Unicode.GetEncoder();

    // Create a buffer large enough to hold the string
    byte[] unicodeText = new byte[str.Length * 2];
    enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);

    // Now that we have a byte array we can ask the CSP to hash it
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] result = md5.ComputeHash(unicodeText);

    // Build the final string by converting each byte
    // into hex and appending it to a StringBuilder
    StringBuilder sb = new StringBuilder();
    for (int i=0;i<result.Length;i++)
    {
        sb.Append(result[i].ToString("X2"));
    }

    // And return it
    return sb.ToString();
}

入力 = "123" の場合、上記のコードは "5FA285E1BEBE0A6623E33AFC04A1FBD5" を返します

次の PHP コードを試しましたが、同じ出力が得られません。

SO question PHP MD5 not matching C# MD5から:

$str = "123";
$strUtf32 = mb_convert_encoding($str, "UTF-32LE");
echo md5($strUtf32);

このコードの結果は "a0d5c8a4d386f15284ec25fe1eeeb426" になります。ちなみに、UTF-32LE を utf-8 または utf-16 に変更しても、同じ結果にはなりません。

誰でも助けることができますか?

4

2 に答える 2

2

はい、CodesInChaos が示唆するように、エンコーディングが間違っています。

PHP側でこれを試してください:

$str = "123";
$strUtf32 = mb_convert_encoding($str, "UTF-16LE");
echo md5($strUtf32);

これにより、 が得られます5FA285E1BEBE0A6623E33AFC04A1FBD5System.Text.Encoding.Unicodeこれはc# 側で一致します。

それ以外の場合は、c# 側に変更System.Text.Encoding.Unicodeします。System.Text.Encoding.UTF32これにより、 が得られますA0D5C8A4D386F15284EC25FE1EEEB426

于 2013-02-17T04:40:11.407 に答える
0

ええと、C# コードは MD5 ハッシュを作成し、PHPmb_convert_encoding関数は文字列をエンコードするだけです...

さらに、これはあなたが提供したリンクの完全なコードではありません。重要な MD5 機能がありません:

$str = "123";
$strUtf32 = mb_convert_encoding($str, "UTF-16");
echo md5($strUtf32); <=====

そのコードが一致する場合、MD5 アルゴリズムは同じであり、言語によって異なるわけではないため、それが機能しない理由はありません。

于 2013-02-17T03:53:09.317 に答える