Wie verwende ich die SHA1CryptoServiceProvider()
für eine Datei, um eine SHA1-Prüfsumme der Datei zu erstellen?Wie mache ich eine SHA1-Dateiprüfsumme in C#?
Antwort
Mit der ComputeHash-Methode. Siehe hier:
Beispiel Snippet:
using(var cryptoProvider = new SHA1CryptoServiceProvider())
{
string hash = BitConverter
.ToString(cryptoProvider.ComputeHash(buffer));
//do something with hash
}
Wo Puffer der Inhalt der Datei ist.
using (FileStream fs = new FileStream(@"C:\file\location", FileMode.Open))
using (BufferedStream bs = new BufferedStream(fs))
{
using (SHA1Managed sha1 = new SHA1Managed())
{
byte[] hash = sha1.ComputeHash(bs);
StringBuilder formatted = new StringBuilder(2 * hash.Length);
foreach (byte b in hash)
{
formatted.AppendFormat("{0:X2}", b);
}
}
}
formatted
enthält die Zeichenfolgendarstellung des SHA-1-Hash. Durch die Verwendung eines anstelle eines Byte-Puffers berechnet den Hash in Chunks, sodass Sie nicht die gesamte Datei auf einmal laden müssen, was für große Dateien hilfreich ist.
Sie sollten einen 'StringBuilder' verwenden, anstatt 20 Zeichenfolgen beim Erstellen der Hash-Zeichenfolge zu generieren. –
'FileStream' ist' IDisposable' und sollte auch in einem 'using' Block verwendet werden. –
Die ursprüngliche Kapazität von StringBuilder sollte doppelt so groß sein wie die Anzahl der Bytes im Hash. –
Wenn Sie die Datei bereits als Stream lesen, berechnet das folgende Verfahren den Hashwert beim Lesen. Die einzige Einschränkung ist, dass Sie den gesamten Stream verbrauchen müssen.
class Program
{
static void Main(string[] args)
{
String sourceFileName = "C:\\test.txt";
Byte[] shaHash;
//Use Sha1Managed if you really want sha1
using (var shaForStream = new SHA256Managed())
using (Stream sourceFileStream = File.Open(sourceFileName, FileMode.Open))
using (Stream sourceStream = new CryptoStream(sourceFileStream, shaForStream, CryptoStreamMode.Read))
{
//Do something with the sourceStream
//NOTE You need to read all the bytes, otherwise you'll get an exception ({"Hash must be finalized before the hash value is retrieved."})
while(sourceStream.ReadByte() != -1);
shaHash = shaForStream.Hash;
}
Console.WriteLine(Convert.ToBase64String(shaHash));
}
}
+1 für 'CryptoStream'. es könnte nützlich sein, wenn Sie eine Datei von irgendwo lesen möchten (zB von einer http-Anfrage), sie an einen bestimmten Ort schreiben (zB: auf die Festplatte) und gleichzeitig den Hash berechnen. – tigrou
Bei einem Test in einer großen Datei war dieser Code um Größenordnungen schlechter als die ComputeHash-Lösungen. Vielleicht ist es das 'ReadByte'-Lesebuch? –
@ MichaelKropat interessant. Gut zu wissen. 10 mal, 100 mal langsamer? –
Sie können auch versuchen:
FileStream fop = File.OpenRead(@"C:\test.bin");
string chksum = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(fop));
- 1. C# Wie mache ich eine Rückkehrfunktion?
- 2. Wie mache ich ein Quadrat in C++
- 3. Wie mache ich eine Zuweisungsklassenmethode in Objective-C?
- 4. Wie mache ich .exe in C++ duplizieren?
- 5. Wie mache ich eine Knopfanimation?
- 6. Wie mache ich eine Zeitsequenz?
- 7. Wie mache ich eine Schleife in Assembler?
- 8. Wie mache ich eine Rohrschleife in Zsh?
- 9. Wie mache ich eine Ansicht in ios
- 10. Wie mache ich eine Breitenbindung in CSS?
- 11. Wie mache ich eine Navbar in PHP
- 12. Wie mache ich eine Kreissache in CSS?
- 13. Wie mache ich eine Teilübereinstimmung in Elasticsearch?
- 14. Wie mache ich eine skinfähige Anwendung?
- 15. Wie mache ich eine schnellere C# .NET Timer-Alternative?
- 16. Wie mache ich eine Echtzeit-Mehrfachliniengrafik?
- 17. Wie mache ich eine JPQL-Unteranfrage?
- 18. Wie mache ich eine Datei Selbstaktualisierung (Native C++)
- 19. Wie mache ich Funktionen mit Flagparametern? (C++)
- 20. Wie mache ich Endlosschleife in dieser Funktion in C
- 21. Wie mache ich eine Autovervollständigung TextBox in ASP.NET?
- 22. Wie mache ich eine einzige Bildschaltfläche?
- 23. Wie mache ich eine ausführbare Datei in eine Desktop-Anwendung
- 24. Wie mache ich eine Taste eine Schleife in Java laufen
- 25. Wie mache ich eine Arraylist public
- 26. Wie mache ich eine ListPreference mit Checkbox
- 27. Wie mache ich eine Schattenbox mit Farbverlauf?
- 28. Wie mache ich eine saubere asynchrone Schleife?
- 29. Wie mache ich eine Variable local
- 30. Wie mache ich eine aspxdocumentviewer Richtung rtl?
+1 für eine große Spitze des 'BitConverter' auf dem mit einem Hex-String in einem Rutsch zu erzeugen. –
SHA1CryptoServiceProvider sollte in einen 'using' Block gehüllt sein – Mike737
' BitConverter' trennt Bytes mit einem Strich AA-F0-CC im Gegensatz zu @ mgbowens Lösung. Kann oder darf nicht sein, was gewünscht wird. –