2011-09-13 14 views
16

Devo implementare la crittografia/decrittografia AES 256 e non sono stato in grado di trovare un esempio che funzioni correttamente.C# Esempio di crittografia AES256 utilizzando System.Security.Cryptography.Aes

MSDN suggerisce che dovrei usare la classe AES.

La classe Rijndael è il predecessore dell'algoritmo Aes. Dovresti usare l'algoritmo Aes invece di Rijndael. Per ulteriori informazioni, vedere la voce The Differences Between Rijndael and AES nel blog Sicurezza .NET.

Qualcuno potrebbe indicarmi un buon esempio utilizzando la classe AES per AES256?

Per aggiungere un po 'più di chiarezza:

Ho un file cifrato che contiene la chiave condivisa e una stringa di testo cifrato. Devo decodificare il testo e quindi convalidarlo.

Tutti gli esempi che ho visto si aspettano almeno 2 parametri per eseguire la crittografia/decrittografia.

Devo essere in grado di dedurre il vettore di inizializzazione e la chiave dal testo nel file di crittografia?

Questo è un esempio del testo tenutosi nel mio file cifrato:

UCE ± Ira ƒ @ † ²; A; öDWnªóª ©© ¨|L

+4

La documentazione sia per il [AesManaged] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged .aspx) e [AesCryptoServiceProvider] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aescryptoserviceprovider.aspx) classe fornisce esempi elaborati. Se gli esempi non funzionano in un modo che ti aspetti, ti preghiamo di pubblicare un programma breve ma completo che mostri il problema. – dtb

+0

@dtb Grazie. Non avevo individuato l'esempio in AesManaged in quanto questo è disponibile solo per .Net 4 e attualmente sto usando 3.5 ma l'esempio sembra diretto. – TeamWild

+0

Per decodificare i dati, è necessario sapere quale modalità di streaming cipher è stata inizialmente crittografata con (di solito CBC o ECB). La BCE non ha un vettore di inizializzazione. Se è stato utilizzato CBC, i primi byte dei dati crittografati potrebbero essere l'IV. Fornisci tutte le informazioni che hai e pubblica un campione completo valido (kez e dati crittografati). Dato che i dati crittografati sono binari, dovrai postarli codificati Base 64 o in una rappresentazione esadecimale. – Codo

risposta

3

Una volta avevo scoperto tutte le informazioni su come il mio cliente stava trattando la crittografia/decrittografia alla loro estremità era dritto utilizzando il AesManaged example suggerito da dtb.

Il codice finalmente implementato iniziato in questo modo:

try 
    { 
     // Create a new instance of the AesManaged class. This generates a new key and initialization vector (IV). 
     AesManaged myAes = new AesManaged(); 

     // Override the cipher mode, key and IV 
     myAes.Mode = CipherMode.ECB; 
     myAes.IV = new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // CRB mode uses an empty IV 
     myAes.Key = CipherKey; // Byte array representing the key 
     myAes.Padding = PaddingMode.None; 

     // Create a encryption object to perform the stream transform. 
     ICryptoTransform encryptor = myAes.CreateEncryptor(); 

     // TODO: perform the encryption/decryption as required... 

    } 
    catch (Exception ex) 
    { 
     // TODO: Log the error 
     throw ex; 
    } 
+0

Non consiglierei di utilizzare la modalità di crittografia ECB. Usa CBC o qualcos'altro.Se hai bisogno di sapere perché, dai un'occhiata a questo articolo di Wikipedia: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation. Inoltre, ecco un buon esempio di come eseguire la crittografia con AES in C#: https://github.com/jbubriski/Encryptamajig –

+0

Anche il tuo IV deve essere randomizzato, ogni volta che si crittografa dati diversi. Stai anche consultando la modalità CRB nel commento ... –

+1

@JohnBubriski - La terza parte che ha fornito il file crittografato ha insistito sull'uso della modalità di crittografia e IV. Capisco che non è come dovresti farlo, ma è stato il caso di "Fit in o F ** k off". – TeamWild

8

Forse questo esempio elencato here può aiutarti. Dichiarazione da parte dell'autore

circa 24 righe di codice per crittografare, 23 per decifrare

Problemi correlati