/// <summary> /// Metodo que crea un cifrador o descifrador /// </summary> /// <param name="keyMaterial"></param> /// <param name="rutaArchivoOriginal">Ruta al archivo que se va a procesar</param> /// <param name="rutaDestino">Ruta de carpeta donde se guardará el archivo procesado</param> /// <param name="cifrar">Determina si se va a cifrar o descifrar. TRUE=Cifrar</param> /// <returns></returns> public static async Task CifradoDescifradoAsincrono(byte[] keyMaterial, string rutaArchivoOriginal, string rutaDestino, bool cifrar) { ISymmetricKeyAlgorithmProvider aesGcm = WinRTCrypto.SymmetricKeyAlgorithmProvider.OpenAlgorithm(PCLCrypto.SymmetricAlgorithm.AesCbcPkcs7); var claveDerivada = aesGcm.CreateSymmetricKey(keyMaterial); try { var mecanismoCriptografico = cifrar ? WinRTCrypto.CryptographicEngine.CreateEncryptor(claveDerivada) : WinRTCrypto.CryptographicEngine.CreateDecryptor(claveDerivada); var transformacion = new PCLCrypto.ICryptoTransform[] { mecanismoCriptografico }; await CryptoTransformFileAsync(rutaArchivoOriginal, rutaDestino, transformacion); } catch { throw; } }
public static async Task CifradoDescifradoAsincrono(byte[] keyMaterial, string rutaArchivoOriginal, string rutaDestino, bool cifrar) { ISymmetricKeyAlgorithmProvider aesGcm = WinRTCrypto.SymmetricKeyAlgorithmProvider.OpenAlgorithm(PCLCrypto.SymmetricAlgorithm.AesCbcPkcs7); var claveDerivada = aesGcm.CreateSymmetricKey(keyMaterial); try { if (cifrar) { var cifrador = new PCLCrypto.ICryptoTransform[] { WinRTCrypto.CryptographicEngine.CreateEncryptor(claveDerivada) }; await CryptoTransformFileAsync(rutaArchivoOriginal, rutaDestino, cifrador); } else { var descifrador = new PCLCrypto.ICryptoTransform[] { WinRTCrypto.CryptographicEngine.CreateDecryptor(claveDerivada) }; await CryptoTransformFileAsync(rutaArchivoOriginal, rutaDestino, descifrador); } } catch { throw; } }