UWP: AES encryption and decryption

后端 未结 2 1805
小蘑菇
小蘑菇 2020-12-21 14:56

I had a simple class to do some basic local encryption for Windows Phone 8. I wanted to use the class again in a new UWP Windows 10 app for the Windows Store. Unfortunately

相关标签:
2条回答
  • 2020-12-21 15:21

    Cleaner code

        public static async Task<bool> EncryptAesFileAsync(StorageFile fileForEncryption, string aesKey256, string iv16lenght)
        {
    
            bool success = false;
            try
            {
                //Initialize key
                IBuffer key = Convert.FromBase64String(aesKey256).AsBuffer();
                var m_iv = Convert.FromBase64String(iv16lenght).AsBuffer();
                SymmetricKeyAlgorithmProvider provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
                var m_key = provider.CreateSymmetricKey(key);
    
                //secured data
                IBuffer data = await FileIO.ReadBufferAsync(fileForEncryption);
                IBuffer SecuredData = CryptographicEngine.Encrypt(m_key, data, m_iv);
                await FileIO.WriteBufferAsync(fileForEncryption, SecuredData);
                success = true;
            }
            catch (Exception ex)
            {
                success = false;
                DialogHelper.DisplayMessageDebug(ex);
            }
            return success;
    
        }
        public static async Task<bool> DecryptAesFileAsync(StorageFile EncryptedFile, string aesKey256, string iv16lenght)
        {
    
            bool success = false;
            try
            {
                //Initialize key
                IBuffer key = Convert.FromBase64String(aesKey256).AsBuffer();
                var m_iv = Convert.FromBase64String(iv16lenght).AsBuffer();
                SymmetricKeyAlgorithmProvider provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
                var m_key = provider.CreateSymmetricKey(key);
    
                //Unsecured Data
                IBuffer data = await FileIO.ReadBufferAsync(EncryptedFile);
                IBuffer UnSecuredData = CryptographicEngine.Decrypt(m_key, data, m_iv);
                await FileIO.WriteBufferAsync(EncryptedFile, UnSecuredData);
                success = true;
            }
            catch (Exception ex)
            {
                success = false;
                DialogHelper.DisplayMessageDebug(ex);
            }
            return success;
    
        }
    
    0 讨论(0)
  • 2020-12-21 15:25

    You need to read the Documentation about SymmetricAlgorithmProvider and CryptographicEngine.

    I have here a little example, how to use these together:

    using System;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using System.Text;
    using Windows.Security.Cryptography;
    using Windows.Security.Cryptography.Core;
    using Windows.Storage.Streams;
    
    namespace CryptTest
    {
        public class AesEnDecryption
        {
    
            // Key with 256 and IV with 16 length
            private string AES_Key = "Y+3xQDLPWalRKK3U/JuabsJNnuEO91zRiOH5gjgOqck=";
            private string AES_IV = "15CV1/ZOnVI3rY4wk4INBg==";
            private IBuffer m_iv = null;
            private CryptographicKey m_key;
    
            public AesEnDecryption()
            {
    
                IBuffer key = Convert.FromBase64String(AES_Key).AsBuffer();
                m_iv = Convert.FromBase64String(AES_IV).AsBuffer();
                SymmetricKeyAlgorithmProvider provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
                m_key = provider.CreateSymmetricKey(key);
            }
    
            public byte[] Encrypt(byte[] input)
            {
    
                IBuffer bufferMsg = CryptographicBuffer.ConvertStringToBinary(Encoding.ASCII.GetString(input), BinaryStringEncoding.Utf8);
                IBuffer bufferEncrypt = CryptographicEngine.Encrypt(m_key, bufferMsg, m_iv);
                return bufferEncrypt.ToArray();
            }
    
            public byte[] Decrypt(byte[] input)
            {
                IBuffer bufferDecrypt = CryptographicEngine.Decrypt(m_key, input.AsBuffer(), m_iv);
                return bufferDecrypt.ToArray();
            }
        }
    }
    

    When you want to use another Algorithm then AesCbcPkcs7, then you have to change the SymmetricAlgorithmName

    0 讨论(0)
提交回复
热议问题