Questo è il mio primo progetto in C# e sono quasi un principiante. Io uso openfiledialoge per selezionare il file e ottenere il percorso file dal metodo GetFullPath e memorizzarlo in una variabile chiamata ad esempio fpath. Ho bisogno di calcolare l'hash del file che il suo percorso è memorizzato nella variabile fpath. Penso che possa essere fatto tramite GetHashCode. Qualcuno può darmi un frammento o una piccola guida?Come devo calcolare i file hash (md5 e SHA1) in C#
risposta
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] hash = sha.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", String.Empty);
}
Ecco alcuni codice che ho usato per rispondere a un'altra question su SO
/// <summary>
/// Gets a hash of the file using SHA1.
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string GetSHA1Hash(string filePath)
{
using (var sha1 = new SHA1CryptoServiceProvider())
return GetHash(filePath, sha1);
}
/// <summary>
/// Gets a hash of the file using SHA1.
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string GetSHA1Hash(Stream s)
{
using (var sha1 = new SHA1CryptoServiceProvider())
return GetHash(s, sha1);
}
/// <summary>
/// Gets a hash of the file using MD5.
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string GetMD5Hash(string filePath)
{
using (var md5 = new MD5CryptoServiceProvider())
return GetHash(filePath, md5);
}
/// <summary>
/// Gets a hash of the file using MD5.
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string GetMD5Hash(Stream s)
{
using (var md5 = new MD5CryptoServiceProvider())
return GetHash(s, md5);
}
private static string GetHash(string filePath, HashAlgorithm hasher)
{
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
return GetHash(fs, hasher);
}
private static string GetHash(Stream s, HashAlgorithm hasher)
{
var hash = hasher.ComputeHash(s);
var hashStr = Convert.ToBase64String(hash);
return hashStr.TrimEnd('=');
}
GetHashCode() è, per impostazione predefinita, per uso interno, per verificare se due riferimenti a un oggetto sono infatti lo stesso oggetto. L'implementazione dell'hash di deafult si basa sulla posizione stack/heap e quindi non sarà deterministica tra le esecuzioni del programma (o addirittura confrontando due diversi riferimenti con esattamente gli stessi dati). Quindi, non dovrebbe essere usato per calcolare i checksum.
.NET ha una matrice di librerie incorporate che servono a questo scopo; sono nello spazio dei nomi System.Security.Cryptography. I due si desidera sono le classi MD5 e SHA1:
byte[] hashBytes;
using(var inputFileStream = File.Open(filePath))
{
var md5 = MD5.Create();
hashBytes = md5.ComputeHash(inputFileStream);
}
La classe SHA1
funziona allo stesso modo.
Una parola di cautela; sia MD5 che SHA1 sono considerati "interrotti" e non dovrebbero essere usati in nessun sistema che richiede un hash "sicuro". Prendi in considerazione l'utilizzo degli algoritmi SHA-256 o SHA-512 nel sistema generale. Se non hai bisogno di un hash sicuro, ci sono hash più veloci del checksum come FNV-1a o MurmurHash che forniscono una buona resistenza alle collisioni.
Ecco un codice completo che utilizza la libreria gestita C# per calcolare l'hash.
using system.IO;
using System.Security.Cryptography;
public string GetSha1Hash(string filePath)
{
using (FileStream fs = File.OpenRead(filePath))
{
SHA1 sha = new SHA1Managed();
return BitConverter.ToString(sha.ComputeHash(fs));
}
}
- 1. Java calcolare hash MD5
- 2. Libreria di hashing MD5 e SHA1 C++
- 3. Quanto è sicuro MD5 e SHA1
- 4. calcola e visualizza il file MD5 Hash in un'etichetta
- 5. Algoritmo Complessità e sicurezza: MD5 o SHA1?
- 6. Tornando sbagliato hash MD5 in C
- 7. C# calcolo hash veloce
- 8. C# Generazione più veloce di hash MD5
- 9. MD5 hash in silverlight
- 10. Come creare un hash MD5 di una stringa in C?
- 11. Combina gli hash MD5 di più file
- 12. Come devo accedere all'hash Boost SHA1?
- 13. Come calcolare l'hash MD5 di un file di grandi dimensioni in C?
- 14. Come calcolare un hash MD5 in uno script di pre-richiesta in PostMan?
- 15. HMC SHA1 hash - C# produce output hash diversi da Ruby
- 16. MD5 Funzione hash in Excel?
- 17. Come utilizzare SHA1 o MD5 in C#? (Quale è meglio per prestazioni e sicurezza per l'autenticazione)
- 18. MD5 Hash From String
- 19. Padding in MD5 Hash Algorithm
- 20. Combinazione di valori hash MD5
- 21. Python hash MD5 confronto
- 22. come eseguirò un hash SHA1 su un file?
- 23. Calcolo SHA1 Hash Algorithm Powershell V2.0
- 24. È possibile calcolare l'hash MD5 (o altro) con letture bufferizzate?
- 25. valori hash Memorizzazione SHA1 in MySQL
- 26. Come convertire un hash MD5 in una stringa e usarlo come nome file
- 27. Localmente calcolare set hash del file
- 28. È possibile calcolare l'hash MD5 direttamente nel linguaggio T-SQL?
- 29. L'API WinRT gestita include un modo per calcolare un hash MD5?
- 30. Esiste un modo standard per rappresentare un hash SHA1 come stringa C e come posso convertirlo?
Ho provato questo da Ho ricevuto questo messaggio: Impossibile trovare il tipo o il nome dello spazio dei nomi 'FileStream'. – n1kita
è necessario aggiungere lo spazio dei nomi system.io –
Nella mia esperienza, 'SHA256CryptoServiceProvider' è un po 'più veloce di' SHA256Managed'. Di solito è una goccia in sostituzione. –