私は.Net C#でこの関数を持っていて、PHPで同じことをしたい. しかし、私はすべての C# の部分を理解しているわけではなく、自分のコードについて確信が持てません。
public static string getMD5Hash(string input)
{
MD5 mD = new MD5CryptoServiceProvider();
byte[] array = Encoding.UTF8.GetBytes(input);
array = mD.ComputeHash(array);
StringBuilder stringBuilder = new StringBuilder();
int i = 0;
byte[] array2 = array;
int length = array2.Length;
while (i < length)
{
stringBuilder.Append(array2[i].ToString("x2").ToLower());
i++;
}
return stringBuilder.ToString();
}
ここで、文字列からMD5ハッシュを作成する方法を説明する例を見つけました(同じ人です): http://en.csharp-online.net/Create_a_MD5_Hash_from_a_string
そして、String to Byte : String to byte array in phpに関する SoF の投稿を見つけました
だからここで私がやったのは、いくつかのテストを行うためだけです:
function getMD5Hash($input){
for($i = 0; $i < strlen($input); $i++){
$char = substr($input,$i,1);
$hex_ary[] = sprintf("%02X", ord($char));}
$TheMD5=md5(implode('',$hex_ary));
for($i = 0; $i < strlen($TheMD5); $i++){
$char = substr($TheMD5,$i,1);
$Sec_hex_ary[] .= sprintf("%02X", ord($char));}
$StringBuilder ='';
$i = 0;
$Thelength = count($Sec_hex_ary);
while ($i < $Thelength)
{
$stringBuilder .= strtolower(sprintf("%02X", ord($Sec_hex_ary[$i])));
$i++;
}
return $stringBuilder;}
だから私が理解していること(うまくいくことを願っています):
- 最初に md5 プロバイダーを呼び出します。PHP => 不要
- 次に、バイト表現で「input」を含む配列「byte[]」「array」を作成します。
- 次に、「配列」を md5 でエンコードします。
- 新しい文字列を作成します。
- 次に、「array」を含む配列「byte[]」「array2」を作成します
- 次に、バイトの文字列表現を小文字で文字列に追加します。
- 文字列を返します。
私が間違っている ?はいの場合 (確かに) 説明していただけますか?
それが私に与えるもの: "echo getMD5Hash('1ca48ad63d48c3adfae0d7af77f27027'); "
Print_r($hex_ary) =
Array
(
[0] => 31
[1] => 63
[2] => 61
[3] => 34
[4] => 38
[5] => 61
[6] => 64
[7] => 36
[8] => 33
[9] => 64
[10] => 34
[11] => 38
[12] => 63
[13] => 33
[14] => 61
[15] => 64
[16] => 66
[17] => 61
[18] => 65
[19] => 30
[20] => 64
[21] => 37
[22] => 61
[23] => 66
[24] => 37
[25] => 37
[26] => 66
[27] => 32
[28] => 37
[29] => 30
[30] => 32
[31] => 37
)
echo $TheMD5;
=> 418868f1137ea82935bbd235133993cf
print_r($Sec_hex_ary);
Array
(
[0] => 34
[1] => 31
[2] => 38
[3] => 38
[4] => 36
[5] => 38
[6] => 66
[7] => 31
[8] => 31
[9] => 33
[10] => 37
[11] => 65
[12] => 61
[13] => 38
[14] => 32
[15] => 39
[16] => 33
[17] => 35
[18] => 62
[19] => 62
[20] => 64
[21] => 32
[22] => 33
[23] => 35
[24] => 31
[25] => 33
[26] => 33
[27] => 39
[28] => 39
[29] => 33
[30] => 63
[31] => 66
)
そして、エコーは私に与えます:
これは正しいと思いますか?助けてくれてありがとう。