我一直在尝试在Windows 8(Windows应用商店应用)中使用Windows.security.cryptography API进行字符串的基本对称密钥加密(暂时)。
在线查看各种示例,但在所有这些示例中,代码都因我的密钥长度异常而失败。
static byte[] cKey = { (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E' };
static byte[] cIV = { (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E' };
public static string Encrypt(String guidOriginal)
{
IBuffer encrypted;
IBuffer buffer;
IBuffer iv = null;
SymmetricKeyAlgorithmProvider algorithm = SymmetricKeyAlgorithmProvider.OpenAlgorithm("AES_CBC_PKCS7");
IBuffer keymaterial = CryptographicBuffer.CreateFromByteArray(cKey);
CryptographicKey key = algorithm.CreateSymmetricKey(keymaterial);
iv = CryptographicBuffer.CreateFromByteArray(cIV);
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
buffer = CryptographicBuffer.CreateFromByteArray( encoding.GetBytes(guidOriginal));
encrypted = Windows.Security.Cryptography.Core.CryptographicEngine.Encrypt(key, buffer, iv);
return CryptographicBuffer.EncodeToBase64String(encrypted);
}
^^以上是我尝试过的代码之一(使用了来自http://social.msdn.microsoft.com/Forums/en-ZA/winappswithcsharp/thread/b541a08a-d3cd-4e21-8d21-7ed80749cb23的代码的修改版本),该代码在
失败 CryptographicKey key = algorithm.CreateSymmetricKey(keymaterial);
例外: ArgumentException
答案 0 :(得分:1)
您必须确保您的密钥块精确为16,24或32个字节。
请参阅维基。 http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
AES基于被称为替换置换网络的设计原则,并且在软件和硬件方面都很快。[6]与其前身DES不同,AES不使用Feistel网络。 AES是Rijndael的变体,其固定块大小为128位,密钥大小为128,192或256位。相比之下,Rijndael规范本身使用块和密钥大小来指定,这些大小可以是32位的任意倍数,最小值为128,最大值为256位。