UWP:AES 加解密 [英] UWP: AES encryption and decryption

查看:34
本文介绍了UWP:AES 加解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的类来为 Windows Phone 8 执行一些基本的本地加密.我想在 Windows 应用商店的新 UWP Windows 10 应用程序中再次使用该类.不幸的是,我不能再使用 AesManaged 类了.

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 I cannot use the AesManaged class anymore.

我尝试使用 Windows.Security.Cryptography.Core,但完全卡住了.这是我用于 Windows Phone 8 的原始类.当时我一定在互联网上找到了它.

I tried to use Windows.Security.Cryptography.Core, but I'm completely stuck. This is the original class I used for Windows Phone 8. I must have found it somewhere on the internet back then.

using System.Security.Cryptography;

namespace TestGame

{
    public class AesEnDecryption
    {
        private string AES_Key = "MYLiSQ864FhDevJOeMs9EVp5RmfC7OuH";
        private string AES_IV = "FoL5Tyd9sZclVn5A";

        public string AES_encrypt(string Input)
        {
            var aes = new AesManaged();
            aes.KeySize = 128;
            aes.BlockSize = 128;
            aes.Key = Convert.FromBase64String(AES_Key);
            aes.IV = Encoding.UTF8.GetBytes(AES_IV);

            var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
            byte[] xBuff = null;
            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
                {
                    byte[] xXml = Encoding.UTF8.GetBytes(Input);
                    cs.Write(xXml, 0, xXml.Length);
                }

                xBuff = ms.ToArray();
            }

            string Output = Convert.ToBase64String(xBuff);
            return Output;
        }

        public string AES_decrypt(string Input)
        {
            var aes = new AesManaged();
            aes.KeySize = 128;
            aes.BlockSize = 128;
            aes.Key = Convert.FromBase64String(AES_Key);
            aes.IV = Encoding.UTF8.GetBytes(AES_IV);

            var decrypt = aes.CreateDecryptor();
            byte[] xBuff = null;
            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
                {
                    byte[] xXml = Convert.FromBase64String(Input);
                    cs.Write(xXml, 0, xXml.Length);
                }

                xBuff = ms.ToArray();
            }

            string Output = Encoding.UTF8.GetString(xBuff, 0, xBuff.Length);

            return Output;
        }
    }
}

有人知道如何为 UWP Windows 10 应用翻译这个吗?

Does someone knows how to translate this for UWP Windows 10 apps?

谢谢!

推荐答案

您需要阅读有关 SymmetricAlgorithmProvider加密引擎.

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();
        }
    }
}

如果您想使用其他算法然后 AesCbcPkcs7,那么您必须更改 SymmetricAlgorithmName

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

这篇关于UWP:AES 加解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆