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
Apasionado, geek, ingeniero de locuras y absolutamente convencido de nada