none
.NETstandardで、非対称暗号化 RRS feed

  • 質問

  • .NETstandardで、非対称暗号化をしたいのですが、その方法をご教示ください。

    (.NETstandardでは「System.Security.Cryptography.RSA」はあっても「System.Security.Cryptography.RSACryptoServiceProvider」はないようです)

    2018年8月24日 21:48

回答

  • .NET Framework の暗号モデル - オブジェクトの継承で説明されていますが、

    • アルゴリズム型クラス
    • アルゴリズム クラス
    • アルゴリズム クラスの実装

    という階層構造になっています。今回の場合、非対称暗号を表すAsymmetricAlgorithm、アルゴリズムを表すRSA、アルゴリズムの実装を表すRSACryptoServiceProviderとなるわけです。.NET FrameworkではC#で実装した~Managed、Windows XPまでの暗号ライブラリCrypto APIを使用した~CryptoServiceProvider、Windows Vista以降で搭載されたCNG; Cryptography API: Next Generationを使用した~Cngの主に3種類が用意されていました。

    .NET Standardでは標準を決めるものですから、具体的な実装方法に依存する3階層目のクラスは定義されていないのも当然です。(と言いつつ2.0には含まれているなぁ…)

    なお、RSA.Create()メソッドを使用することで、各プラットフォームで定義されたデフォルトの実装クラスのインスタンスを取得することができます。この方法を使えば具体的な実装クラスに依存せずRSAを扱うことができます。また必要に応じてApp.configで実装クラスを明示的に指定することもできます。

    • 回答としてマーク ナノレス 2018年8月26日 11:09
    2018年8月24日 22:18
  • dobon.netさんは.NET Standardに対応していないので他のサイトを参考にすべきです。ちなみにRSA.ToXmlStringは.NET Standard 2.0と記されています。
    • 回答としてマーク ナノレス 2018年8月26日 11:09
    2018年8月25日 0:21

すべての返信

  • .NET Framework の暗号モデル - オブジェクトの継承で説明されていますが、

    • アルゴリズム型クラス
    • アルゴリズム クラス
    • アルゴリズム クラスの実装

    という階層構造になっています。今回の場合、非対称暗号を表すAsymmetricAlgorithm、アルゴリズムを表すRSA、アルゴリズムの実装を表すRSACryptoServiceProviderとなるわけです。.NET FrameworkではC#で実装した~Managed、Windows XPまでの暗号ライブラリCrypto APIを使用した~CryptoServiceProvider、Windows Vista以降で搭載されたCNG; Cryptography API: Next Generationを使用した~Cngの主に3種類が用意されていました。

    .NET Standardでは標準を決めるものですから、具体的な実装方法に依存する3階層目のクラスは定義されていないのも当然です。(と言いつつ2.0には含まれているなぁ…)

    なお、RSA.Create()メソッドを使用することで、各プラットフォームで定義されたデフォルトの実装クラスのインスタンスを取得することができます。この方法を使えば具体的な実装クラスに依存せずRSAを扱うことができます。また必要に応じてApp.configで実装クラスを明示的に指定することもできます。

    • 回答としてマーク ナノレス 2018年8月26日 11:09
    2018年8月24日 22:18
  • System.Security.Cryptography.RSA rsaobj
                            = System.Security.Cryptography.RSA.Create();

    によって、rsaobjのインスタンスを作ることはできました。

    ・共通鍵と秘密鍵の作り方(https://dobon.net/vb/dotnet/string/rsaencryption.htmlでは、toXmlStringで作れたが、rsaobjでは見当たらない)

    ・暗号化のしかた(Encryptがそれっぽいが、引数がbyte型配列とパディング。公開鍵はどこに入れるのか?)

    ・復号のしかた(Decryptがそれっぽいが、引数がbyte型配列とパディング。秘密鍵はどこに入れるのか?)

    がわかりませんでした。

    2018年8月24日 23:35
  • dobon.netさんは.NET Standardに対応していないので他のサイトを参考にすべきです。ちなみにRSA.ToXmlStringは.NET Standard 2.0と記されています。
    • 回答としてマーク ナノレス 2018年8月26日 11:09
    2018年8月25日 0:21