0
public static string GetMD5HashFromFile(string fileName)
{
using(var md5 = MD5.Create())
{
try
{
using(var stream = File.OpenRead(fileName))
{
byte[] HashArray;
StringBuilder sb = new StringBuilder(256);
int i = 0;
sb.Append("0x");
HashArray = md5.ComputeHash(stream);
for(i = 0; i < HashArray.Length; i++)
{
sb = sb.Append(String.Format("{0:X2}", HashArray[i]));
}
return sb.ToString();
}
}
catch(Exception)
{
return null;
}
}
}
上記のGetMD5HashFromFile関数を使用して、ファイルのハッシュ値を取得し、これらが同じかどうかを確認します。牽引docxファイルが同じかどうかを確認する方法?
と私は1.docxファイルを作成し、2.docxとして保存します。この2つのファイルのハッシュが同じでないことがわかります。私はなぜ、誰かが私に質問したり、私の質問を解決するためのヒントを与えたりすることができる理由はわかりません。
Docxファイルは基本的にZipアーカイブです。おそらく、2番目のファイルのZipファイルエントリには、異なる日付/タイムスタンプがあります。 docxファイルの作成に使用したアプリケーションによっては、2番目のdocxファイルに異なるメタデータが含まれていることもあります(たとえば、最後に文書が保存/変更された時期、文書の作者、 docxなど)を最初のdocxよりも優先します。 – elgonzo
FYI 1:StringBuilderを初期容量256文字で初期化します。 MD5は128ビット長、つまり16バイトであることに注意してください。 16進表記で16バイトを表現するには、32文字しか必要ありません。したがって、初期容量32でStringBuilderを初期化することができます。 – elgonzo
FYI 2:StringBuilder自体に、書式文字列を使用したAppendFormat(...)オーバーロードがあります。したがって、string.Formatを使用する必要はありませんが、単純に 'sb.AppendFormat(" {0:X2} "、HashArray [i]);' – elgonzo