1

文字列の基本的な対称キー暗号化に 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);
        }

^^ 上記は私が試したコードの 1 つです ( http://social.msdn.microsoft.com/Forums/en-ZA/winappswithcsharp/thread/b541a08a-d3cd-4e21-8d21-のコードの修正版を使用) 7ed80749cb23 ) で失敗します。

 CryptographicKey key = algorithm.CreateSymmetricKey(keymaterial);

例外: ArgumentException

4

1 に答える 1

1

キーブロックが正確に16、24、または32バイトであることを確認する必要があります。

wikiを参照してください。 http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

AESは、置換置換ネットワークとして知られる設計原理に基づいており、ソフトウェアとハ​​ードウェアの両方で高速です。[6] その前身のDESとは異なり、AESはFeistelネットワークを使用しません。AESは、128ビットの固定ブロックサイズと128、192、または256ビットのキーサイズを持つRijndaelのバリアントです。対照的に、Rijndael仕様自体は、最小128ビットと最大256ビットの両方で、32ビットの任意の倍数のブロックおよびキーサイズで指定されます。

于 2012-11-01T09:38:39.320 に答える