2011-09-13 28 views
16

Necesito implementar cifrado/descifrado AES 256 y no he podido encontrar un ejemplo que funcione correctamente.C# Ejemplo de encriptación AES256 usando System.Security.Cryptography.Aes

MSDN sugiere que deba usar la clase AES.

La clase Rijndael es la predecesora del algoritmo Aes. Deberías usar el algoritmo Aes en lugar de Rijndael. Para obtener más información, consulte la entrada The Differences Between Rijndael and AES en el blog de seguridad de .NET.

¿Alguien podría indicarme un buen ejemplo utilizando la clase AES para AES256?

Para añadir un poco más de claridad:

Tengo un archivo cifrado que contiene la clave compartida y una cadena de texto cifrado. Necesito descifrar el texto y luego validarlo.

Todos los ejemplos que he visto esperan al menos 2 parámetros para realizar el cifrado/descifrado.

¿Debo ser capaz de inferir el vector de Inicialización y la clave del texto en el archivo de cifrado?

Este es un ejemplo del texto que tuvo lugar en mi archivo cifrado:

EUA ± IRA ƒ @ † ²; A; öDWnªóª ©© ¨|L

+4

La documentación, tanto para el [AesManaged] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged .aspx) y la clase [AesCryptoServiceProvider] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aescryptoserviceprovider.aspx) proporciona ejemplos elaborados. Si los ejemplos no funcionan de la manera que espera, publique un programa breve pero completo que demuestre el problema. – dtb

+0

@dtb Gracias. No había visto el ejemplo en AesManaged, ya que solo está disponible para .Net 4 y actualmente estoy usando 3.5, pero el ejemplo parece sencillo. – TeamWild

+0

Para decodificar los datos, necesitará saber en qué modalidad de transmisión de cifrado se cifró inicialmente (normalmente CBC o ECB). ECB no tiene vector de inicialización. Si se usó CBC, los primeros bytes de los datos cifrados podrían ser IV. Proporcione toda la información que tenga y publique una muestra válida completa (kez y datos encriptados). Dado que los datos cifrados son binarios, deberá publicarlos codificados en Base 64 o en una representación hexadecimal. – Codo

Respuesta

3

Una vez que había descubierto toda la información de cómo mi cliente estaba manejando el cifrado/descifrado en su extremo que era directo usando el AesManaged example sugerido por dtb.

El código implementado finalmente comenzó así:

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

No recomendaría usar el modo de cifrado ECB. Use CBC o algo más.Si necesita saber por qué, eche un vistazo a este Artículo de Wikipedia: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation. Además, aquí hay un buen ejemplo de cómo hacer el cifrado con AES en C#: https://github.com/jbubriski/Encryptamajig –

+0

Su IV también debe ser aleatorio, cada vez que encripte datos diferentes. También está haciendo referencia al modo CRB en el comentario ... –

+1

@JohnBubriski - El tercero que ha suministrado el archivo cifrado debe utilizar el modo de cifrado y IV. Entiendo que no es así como debería hacerlo, pero fue un caso de "Fit in or F ** k off". – TeamWild

8

Tal vez este ejemplo aparece here puede ayudarlo. Declaración del autor

cerca de 24 líneas de código para cifrar, 23 para descifrar