以前はSHA1 + MD5の結合について尋ねましたが、その後は計算上のSHA1を理解してから、lagrgeファイルのMD5がSHA256よりも高速ではありません。 私の場合、4.6 GBのファイルは、Linuxシステムで(C#MONO)を持つデフォルトの実装SHA256で約10分かかります。ファイルを取得するSHA256ハッシュコードとチェックサム
public static string GetChecksumBuffered(Stream stream)
{
using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(bufferedStream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
しかし、それは、そのような愛情を持っており、約9分かかりません。
public static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
は、それから私は、彼らが言ったことに従って、私のコードを変更何とかthis topicを読んで。
次に、同じファイルのためにLinuxでsha256sum
コマンドでファイルをテストしようとしています。これは約28秒かかり、上記のコードとLinuxコマンドの両方で同じ結果が得られます!
誰かがハッシュコードとチェックサムとの違いについて読むために私に助言し、私は違いを説明this topicに達します。
私の質問は以下のとおりです。
時間内に上記のコードとLinux
sha256sum
の間で、異なるの原因は何?上記のコードは何をしますか? (つまり、ハッシュコード計算やチェックサム計算を意味するのでしょうか?C#でファイルのハッシュコードとファイルのチェックサムを検索すると、両方とも上記のコードに達します)。
ありますかSHA256の衝突耐性がある場合でも、
sha256sum
に対する動機付けされた攻撃?にはどうすればC#で
sha256sum
としての私の実装は早くすることができますか?
あなたのコードから 'プロセス'を使って 'sha256sum'を呼び出せない理由はありますか? –
@NateDiamondうん!まず、このプログラムはWindowsとLinuxで動作していなければなりません。 2番目は私の質問で言及したように、私はチェックサムの安全性が十分であるかどうか(またはハッシュコード)ではありません –
これは、ディスクからファイルを読み込むコストによって完全に抑制されるはずです。 9分は考えられないことではありませんが、あなたは安っぽいスピンドルドライブと十分なRAMがない安いラップトップが必要です。使用するものを文書化する。 –