Descifrado AES en Windows 8

Hoy vamos a hablar del bonito mundo del cifrado, ojo no del encriptado (meter en una cripta).

La seguridad es importante, y por eso vamos a ver como cifrar en servidor y descifrar en cliente Windows 8 en aplicaciones Metro.

Para este ejemplo usaremos AES con cifrado de 256 Bytes, (Cifrado militar)

Parte servidora

public string Get()
        {
            //
            String original = "1234567812345678";
            String key = "CLAVEDESEGURIDAD";
            byte[] KeyArr = System.Text.Encoding.ASCII.GetBytes(key);
            String iv = "VECTORINICIALIZACION";
            byte[] IvArr = System.Text.Encoding.ASCII.GetBytes(iv);
            using (AesManaged myAes = new AesManaged())
            {
                return EncryptStringToBytes_Aes(original, KeyArr, IvArr);
            }

        }
        static string EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
        {
            byte[] encrypted;
            using (AesManaged aesAlg = new AesManaged())
            {
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(Key, IV);

                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(plainText);
                            swEncrypt.Flush();
                            encrypted = msEncrypt.ToArray();
                            return Convert.ToBase64String(encrypted);
                        }
                    }
                }
            }

        }

 Parte de Cliente

 function RunSample(cadenacifradaenbase64) {

	var Algorithm = Windows.Security.Cryptography.Core.SymmetricKeyAlgorithmProvider.openAlgorithm("AES_CBC");
        	var keymaterial2 = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary("CLAVEDESEGURIDAD", Windows.Security.Cryptography.BinaryStringEncoding.utf8);
        	var key2;
        	try {
        	    key2 = Algorithm.createSymmetricKey(keymaterial2);

        	}
       	 catch (ex) {
        	    Scenario5Output.textContent += ex.message;
        	    Scenario5Output.textContent += "An invalid key size was selected for the given algorithm.n";
        	    return;
       	 }
	var bufferCifrado = Windows.Security.Cryptography.CryptographicBuffer.decodeFromBase64String(cadenacifradaenbase64);
	var iv = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary("VECTORINICIALIZACION", Windows.Security.Cryptography.BinaryStringEncoding.utf8);
	var decrypted = Windows.Security.Cryptography.Core.CryptographicEngine.decrypt(key2, bufferCifrado , iv);        
        var solucion = Windows.Security.Cryptography.CryptographicBuffer.convertBinaryToString(Windows.Security.Cryptography.BinaryStringEncoding.utf8, decrypted);
}

 

Si veo que gustan este tipo de artículos, el próximo día realizaremos el proceso inverso

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.