UWP:AES 加解密 [英] UWP: AES encryption and decryption
问题描述
我有一个简单的类来为 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屋!