4

C# と PHP でファイルの MD5 チェックサムをチェックする際に小さな問題があります。PHP スクリプトで計算されたハッシュは、C# で計算されたハッシュとは異なります。

libcurl.dll C#   = c3506360ce8f42f10dc844e3ff6ed999
libcurl.dll PHP  = f02b47e41e9fa77909031bdef07532af

PHP ではmd5_file関数を使用します。私の C# コードは次のとおりです。

protected string GetFileMD5(string fileName)
{
    FileStream file = new FileStream(fileName, FileMode.Open);
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] retVal = md5.ComputeHash(file);
    file.Close();

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    {
        sb.Append(retVal[i].ToString("x2"));
    }
    return sb.ToString();
}

同じハッシュを計算する方法はありますか? エンコーディングに関するものかもしれないと思います。

前もって感謝します!

4

2 に答える 2

1

私のC#は錆びていますが、次のようになります:

byte[] retVal = md5.ComputeHash(file);

実際にファイル全体を読み取りますか? ストリームオブジェクトをハッシュしているだけだと思います。ストリームを読み取ってから、ファイルの内容全体をハッシュする必要があると思いますか?

  int length = (int)file.Length;  // get file length
  buffer = new byte[length];      // create buffer
  int count;                      // actual number of bytes read
  int sum = 0;                    // total number of bytes read

  // read until Read method returns 0 (end of the stream has been reached)
  while ((count = file.Read(buffer, sum, length - sum)) > 0)
      sum += count;  // sum is a buffer offset for next reading
  byte[] retVal = md5.ComputeHash(buffer);

それが実際にそのまま実行されるかどうかはわかりませんが、そのような線に沿った何かが必​​要になると思います.

于 2013-03-29T15:08:02.187 に答える
0

私はこれを使用します:

php md5 と c# md5 の比較でまだ問題はありませんでした

System.Text.UTF8Encoding text = new System.Text.UTF8Encoding();
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();                
Convert2.ToBase16(md5.ComputeHash(text.GetBytes(encPassString + sess)));


class Convert2
{
   public static string ToBase16(byte[] input)
   {
      return string.Concat((from x in input select x.ToString("x2")).ToArray());
   }
}
于 2013-03-29T14:59:53.137 に答える