UWP: AES encryption and decryption

泄露秘密 提交于 2019-11-29 16:21:37

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

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;

    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!