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

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

问题描述

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



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

 使用System.Security.Cryptography; 

命名空间TestGame

{
public class AesEnDecryption
{
private string AES_Key =MYLiSQ864FhDevJOeMs9EVp5RmfC7OuH;
私人字符串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;
使用(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输出;
}

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;
使用(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输出= Encoding.UTF8.GetString(xBuff,0,xBuff.Length);

return输出;
}
}
}

有人知道如何翻译这对于UWP Windows 10应用程序?



谢谢!

解决方案

需要阅读有关 SymmetricAlgorithmProvider CryptographicEngine。



我在这里有一个例子,如何一起使用:

 使用系统; 
使用System.Linq;
使用System.Runtime.InteropServices.WindowsRuntime;
使用System.Text;
使用Windows.Security.Cryptography;
使用Windows.Security.Cryptography.Core;
使用Windows.Storage.Streams;

命名空间CryptTest
{
public class AesEnDecryption
{

//键256和IV,16个长度
private string AES_Key =Y + 3xQDLPWalRKK3U / JuabsJNnuEO91zRiOH5gjgOqck =;
私有字符串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(输入),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


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.

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

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

Thanks!

解决方案

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

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

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