0

現在、既存のコードをWindows 8に移植しており、サーバーからダウンロードしたデータファイルは「AES / CFB / NoPadding」で暗号化されており、既存のクライアントの多くがデータファイルを使用しているため、データ暗号化モードを変更できません。

WinRTでは、[SymmetricAlgorithmNames][1]に「AES/ CFB/NoPadding」に一致する名前が含まれていません。また、[SymmetricKeyAlgorithmProvider] [2]ドキュメントから、NoPaddingアルゴリズムには「CFB」が含まれていません

  • パディングなし:
  • DES_CBC
  • DES_ECB
  • 3DES_CBC
  • 3DES_ECB
  • RC2_CBC
  • RC2_ECB
  • AES_CBC
  • AES_ECB
では、AES / CFB/NoPaddingをサポートする[SymmetricKeyAlgorithmProvider][2]を取得するにはどうすればよいでしょうか。Metroアプリ用のサードパーティの暗号化パッケージはありますか?

4

1 に答える 1

0

1 つのオプションは、BouncyCastle ライブラリを使用することです。これらは Aes/Ofb/NoPadding をサポートしています。

もう 1 つのオプションは、C# フレームワークの System.Security.Cryptography.Aes を使用し、PaddingMode.Zeros を使用して暗号化してから、暗号化されたデータを入力データと同じ長さに切り詰めることです (暗号化されたテキストの末尾にある埋め込みデータを破棄します)。復号化するときは、パディング (ガベージまたはゼロ) を暗号文に追加してブロック長に合わせ、PaddingMode.None を設定し、復号化して、最後にパディングされたバイトを破棄します (それらは偽物になります)。このようなもの:

        var aes2 = Aes.Create();
        aes2.KeySize = 128;
        aes2.BlockSize = 128;
        aes2.Mode = CipherMode.CFB;
        aes2.Padding = PaddingMode.Zeros;
        var aes2Data = new byte[buff.Length];
        // strip padded data
        Buffer.BlockCopy(aes2.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length), 0,
            aes2Data, 0, buff.Length);
        Console.WriteLine("Aes2 size: {0}", aes2Data.Length);


        // validate aes2
        var size = aes2Data.Length;
        var pad = aes2Data.Length % 16;
        if (pad != 0)
        {
            var tmp = new byte[aes2Data.Length + 16 - pad];
            Buffer.BlockCopy(aes2Data, 0, tmp, 0, aes2Data.Length);
            aes2Data = tmp;
        }

        var aes2Decr = Aes.Create();
        aes2Decr.Padding = PaddingMode.None;
        aes2Decr.Key = aes2.Key;
        aes2Decr.Mode = aes2.Mode;
        aes2Decr.IV = aes2.IV;
        var data2 = aes2Decr.CreateDecryptor().TransformFinalBlock(aes2Data, 0, aes2Data.Length);
        valid = data2.Take(size).SequenceEqual(buff);
        if (!valid)
            throw new ApplicationException("Invalid data");
于 2013-01-03T01:30:44.743 に答える