[C#] Come creare la chiave di crittografia per gli algoritmi di crittografia?


Answers

Dovresti davvero farlo nel modo corretto :)

1) Utilizzare un IV casuale generato in modo sicuro
2) Utilizzare una chiave casuale generata in modo sicuro
3) Non utilizzare la modalità BCE - MAI

AesManaged aes = new AesManaged();
aes.GenerateKey();
aes.GenerateIV();

Il codice sopra genererà in modo corretto e sicuro un IV casuale e una chiave casuale per te.

Question

Voglio utilizzare l'algoritmo di crittografia disponibile nello spazio dei nomi .Net Security, tuttavia sto cercando di capire come generare la chiave, ad esempio l'algoritmo AES ha bisogno di 256 bit, quella chiave da 16 byte e un vettore di inizializzazione, che è anche pochi byte.

  1. Posso usare qualsiasi combinazione di valori nella mia chiave e IV? per esempio tutti gli zeri in Chiave e IV sono validi o no? Conosco il dettaglio dell'algoritmo che fa molti xors, quindi zero non servirà a nulla, ma ci sono delle restrizioni con questi algoritmi?

  2. O Devo generare la chiave usando qualche programma e salvarlo definitivamente da qualche parte?

Voglio memorizzare i dati nel database dopo la crittografia, i dati del profilo sicuro come nome utente, password, numero di telefono ecc. E la chiave saranno disponibili per l'utente del database indicato solo nella stringa di connessione e all'amministratore.




Dipende davvero da cosa devi fare con la chiave.

Se la chiave deve essere generata dal computer (e può essere qualsiasi valore casuale) generalmente prendo un SHA256 di un paio di GUID. Questo è casuale al punto da ottenere senza un generatore di numeri casuali dell'hardware.

Puoi usare le chiavi con tutti gli 0 ma ovviamente non sarà molto sicuro.




Genera un codice a lettere / esadecimale casuale in una lunghezza specifica.

Questa funzione (presa da here ) restituisce una chiave casuale in una lunghezza specifica:

private static string CreateSalt(int size)
{
    //Generate a cryptographic random number.
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] buff = new byte[size];
    rng.GetBytes(buff);

    // Return a Base64 string representation of the random number.
    return Convert.ToBase64String(buff);
}





Links