83315


c#でAES/CBC/PKCS5Paddingで暗号文の復号がしたいです。  
方法はありますでしょうか？  
補足すると、暗号化はjavaを使用してAES/CBC/PKCS5Paddingにてしており、言語を跨いでの暗号化復号となります。


CC BY-SA 4.0
2021-10-28T09:46:50.610
83304
2021-10-29T00:00:31.607
2021-10-29T00:00:31.607
3060
32228
question
c#
c#でAES/CBC/PKCS5Paddingの復号がしたい


C#で用意されている暗号化サービスでは、アルゴリズムは文字列で指定することができます。その上で各アルゴリズムには複数の実装の中から選択することができます。質問のAESであれば

  * [AesCryptoServiceProvider](https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.aescryptoserviceprovider?view=net-5.0) \- Windowsに搭載されているCryptography APIを使用する
  * [AesCng](https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.aescng?view=net-5.0) \- Windows Vista以降に搭載されているCNG; Cryptography API: Next Generationを使用する
  * [AesManaged](https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.aesmanaged?view=net-5.0) \- C#で実装されている

があります。とはいえ環境によっては含まれていないこともあり、.NETインストール時にデフォルトが適切に設定されています。

[code]

    // アルゴリズムを文字列で選択する場合
    var aes = SymmetricAlgorithm.Create("AES");
    
[/code]

[code]

    // アルゴリズムは明示的に指定するが実装は自動選択する場合
    var aes = Aes.Create();
    
[/code]

[code]

    // 実装まで明示的に指定する場合
    var aes = new AesManaged();
    
[/code]

暗号化モードやパディングは文字列で指定することはできず、コードで明示的に記述する必要があります。なお、PKCS #5とPKCS
#7は内容が異なりますが、パティングに関しては同じアルゴリズム（正確にはPKCS #5は8バイトブロック専用で、PKCS
#7は任意バイトブロックという違いがある）です。

[code]

    aes.Mode = CipherMode.CBC;
    aes.Padding = PaddingMode.PKCS7;
    
[/code]

あとは[データの暗号化解除](https://docs.microsoft.com/ja-
jp/dotnet/standard/security/decrypting-data)などを参考にデータを処理してください。


CC BY-SA 4.0
2021-10-28T22:09:23.480
83315
2021-10-28T22:09:23.480
4236
83304
answer