Il mio prossimo compito sarà criptare le password. Sto lavorando al livello di accesso al database e il mio collega ha fatto questa richiesta: implementare un hash SHA-512 su un metodo vuoto. Come posso fare questo?Come cancellare una password?
risposta
Piuttosto un semplice processo davvero:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample);
using(SHA512 sha512 = new SHA512Managed())
{
byte[] hash = sha512.ComputeHash(data); // Add Per User Salt as per the Below
}
hash
ora contiene un hash non reversibile dei dati iniziale che si voleva hash. Inoltre, controlla MSDN. Alcune note: (. Più lungo è il migliore, e unico per ogni utente - Grazie Paul, buon punto)
Qualche parola sul downvote? Grazie. –
+1 da parte mia, anche se sarebbe opportuno menzionare che il sale dovrebbe essere univoco per password. E forse cambiando il tuo esempio per includere il sale – PaulG
@Paul - Buon punto, aggiunto. –
C# esempio da quella pagina:
byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA512 shaM = new SHA512Managed();
result = shaM.ComputeHash(data);
-1 per l'utilizzo del semplice SHA-512, che è veloce. Utilizzare una funzione di derivazione a chiave lenta, come PBKDF2, bcrypt o scrypt. – CodesInChaos
Si dovrebbe usare bcrypt, che è più sicuro per le password di SHA512.
Se è davvero necessario utilizzare SHA512, è necessario utilizzare lo SHA512Managed
class, come indicato da altre risposte.
Assicurati di salare il tuo hash.
come hash una password?
Con un sale. Veramente.
Mai, mai fare questo:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample);
Ma questo:
byte[] data = Encoding.UTF8.GetBytes(stringPasswordForExample + salt);
Questo è uno dei più frainteso "trucco del mestiere". La maggior parte delle persone non sa che cos'è un "sale" e quando lo spieghi a loro, pensano che sia inutile.
La verità è: SHA-512 o MD5 o un hash molto debole, una volta che le tabelle arcobaleno sono precalcolate, non fa alcuna differenza. SHA-65536, se dovesse esistere (sono fasullo qui), non sarebbe migliore di qualsiasi altro algoritmo di hash una volta che le tabelle arcobaleno sono precalcolate.
Un grande abbastanza "sale" rende impossibile tabelle arcobaleno:
http://en.wikipedia.org/wiki/Rainbow_table
Nota che, anche se si comprende appieno come hash, tavoli sale e arcobaleno si riferiscono (e quindi capire perché l'articolo afferma Wikipedia: "Un sale viene spesso impiegato con password hash per rendere questo attacco più difficile, spesso impossibile".) c'è una probabilità molto alta che i tuoi colleghi non lo facciano. Proprio come è molto probabile che la maggior parte delle persone up e downvoting in questo thread non capiscano questo argomento.
Ho visto le risposte qui su SO con 30 upvotes in cui qualcuno che non riusciva a capire che cos'aveva un salino veniva con le parole techno per difendere la sua posizione ... Eppure aveva tutti questi upvotes (troppo pigro per trovare la domanda ma era epico).
E dovresti usare 'RNGCryptoServiceProvider' per creare il tuo sale per ogni nuovo hash, e memorizzare sia l'hash che il sale. – Will
Un sale da solo non è sufficiente. Anche la funzione di hash dovrebbe essere lenta. Usa PBKDF2, bcrypt o scrypt. – CodesInChaos
- 1. Come hash una password
- 2. È un modo sicuro per cancellare una password?
- 3. Come cancellare/cancellare una variabile di cache
- 4. Come cancellare una stringa?
- 5. Come cancellare una matrice
- 6. Come cancellare una richiesta http
- 7. come cancellare una notifica locale in iphone
- 8. Come cancellare una sequenza di eventi UITouch?
- 9. Come "cancellare" una variabile dall'oscilloscopio in angular.js
- 10. Come cancellare una casella di testo onfocus?
- 11. Come cancellare una connessione persistente usando NSURLConnection?
- 12. Come posso cancellare una query di ibernazione
- 13. Rcpp NumericMatrix - come cancellare una riga/colonna?
- 14. Cancellare una sequenza in Nim
- 15. Cancellare una sessione in ASP.NET
- 16. cancellare una riga in Eclipse
- 17. Come posso mascherare una password con Anko?
- 18. ASP.NET MVC - Come gestire una password scaduta?
- 19. Come creare una password casuale? Funzione create_user
- 20. Come resettare una password utente in hudson?
- 21. Come cancellare Tkinter Canvas?
- 22. come cancellare grigliaview?
- 23. Come cancellare MemoryCache?
- 24. Come cancellare l'indice ElasticSearch?
- 25. : come cancellare le notifiche?
- 26. Come si aggiunge una password a una chiave privata OpenSSH che è stata generata senza password?
- 27. Come ricevere una notifica quando un utente cambia password o richiede una reimpostazione della password?
- 28. Come fa il sistema a sapere quando una password contiene parti di una password precedente?
- 29. Come cancellare un dizionario?
- 30. Come cancellare handler.postDelayed?
No. Lasciare la crittografia della password agli esperti di sicurezza. Lo farai male, e allora metteresti in pericolo la tua organizzazione. Assumere un esperto; questo è molto più economico del costo di ripulire il caos dopo un attacco riuscito contro i punti deboli che non sapevi di aggiungere al tuo sistema di sicurezza. –
L'assunzione di un esperto dipende dal livello di rischio. Se stai memorizzando informazioni private per le masse e questa password è tutto ciò che sta in mezzo, sì, cerca un esperto. La maggior parte degli esempi elencati di seguito è sufficiente per il tuo progetto di informazione non riservata media. –
@Eric - Suppongo che tu intenda con questo "utilizzare l'implementazione di SHA512 in .NET invece di crearne uno", non "utilizzare i provider di appartenenza implementati in .NET per la tua sicurezza". Posso vedere una certa validità per entrambi, ma mentre sono d'accordo al 100% con il primo, posso vedere alcune situazioni in cui quest'ultimo non è realmente possibile. In effetti, non mi è mai venuto in mente che qualcuno avrebbe preso in considerazione l'implementazione della propria versione di SHA-512 - quindi il tuo commento mi ha sorpreso per un minuto sul fatto che volevi dire che avrei dovuto estendere la sicurezza nelle mie app a qualcuno più qualificato. :-) – tvanfosson