さて、簡単な答えは次のとおりです。すぐに使用できるものはありません。これらすべてのプラットフォームで機能する 1 つのライブラリが必要な場合は、サードパーティのライブラリを見つける必要があります。マイクロソフトは提供していません。
そうは言っても、プラットフォーム固有の暗号化方法を利用しながら、ビジネス ロジックをプラットフォームレス (PCL など) にできるようにする方法はまだあります。これは、依存性注入と制御の反転 (IoC) を使用しています。
基本的に、ICryptoController
クラスを作成します。このクラスは、実行したいすべての暗号化機能を定義します。AES 関数を実行する場合は、メソッドを作成します。
Task<byte[]> AesEncrypt(byte[] key, byte[] data, byte[] iv);
Task<byte[]> AesDecrypt(byte[] key, byte[] data, byte[] iv);
WP8 と Win8 の IBuffers はそうではありませんが、バイト配列 (byte[]) はクロスプラットフォームであるため、戻り値と入力値として使用することをお勧めします。
次に、アクセス可能なプロパティServiceLocator
を含むクラスを PCL に作成します。static
ICryptoController
各プラットフォームで、CryptoController
を実装するクラスを作成しますICryptoController
。次に、各暗号化機能をプラットフォーム固有の実装でオーバーライドします。WPF は System.Security を使用する場合があります。Windows ストア アプリは SymmetricAlgorithmProvider などを使用します。
(たとえば、調べてみると、Rfc2898DeriveBytes は、実際には単なる PBKDF2、パスワードベースのキー導出関数 2 です。Windows ストアは、KeyDerivationAlgorithmProvider
クラスを介してこれを行う機能を提供します。これを行うためのガイドがここにあります。)
各プラットフォームの各アプリの開始時に、プロパティの値をServiceLocator
プラットフォーム固有のバージョンに設定します。PCL クラスは、暗号化アルゴリズムのプラットフォーム固有の実装に自由にアクセスできるようになりました。
Service Locator ライブラリはたくさんあります。他にもたくさんありますが、Ninject はその 1 つです。たとえば、1 つは MvvmLight に含まれています。これにより、実装が非常に簡単になります (ただし、特に難しくはありません)。
これが役に立ち、幸せなコーディングになることを願っています!
最後に、BouncyCastle を別のプラットフォームに移植しようとしている人がいることを知っています。しかし、私はまだ実装を見つけていませんPortable
。学習しなければならない暗号システムの量を減らしたい場合は、信頼できる実行可能な BouncyCastle 実装が必要なシステムの数を確認することをお勧めします。たとえば、Win8 用に 2 つ利用できると思いますが、それらの作成者を保証することはできません。