2

以下で機能する暗号化/復号化の使用方法を示す c# の暗号化の例を探しています: - Silverlight クライアント - Windows タブレット アプリ - Windows Phone 7 および 8 アプリ

実際、いずれかのプラットフォームでは機能するが、他のプラットフォームでは機能しない例が見つかりました。これは主に、IBuffer (Windows Phone 8 の例で使用) が配置されている名前空間が Silverlight クライアントで使用できないように見えるためです。その他の問題は、たとえばクラス Rfc2898DeriveBytes は、Windows Phone アプリの名前空間に同等の対応物がないように思われ、せいぜい私にとっては、適切なクラス、KeySizes、Salts を派生させるのが難しいように思われることです。コードが Rfc2898DeriveBytes クラスで生成するのと同じ暗号化結果を再現します。

それで、上記のすべてのプラットフォームで動作する暗号化/復号化に関する良い例へのリンクを持っている人はいますか?

ご協力いただきありがとうございます。エイドリアン

4

2 に答える 2

0

さて、簡単な答えは次のとおりです。すぐに使用できるものはありません。これらすべてのプラットフォームで機能する 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 に作成します。staticICryptoController

各プラットフォームで、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 つ利用できると思いますが、それらの作成者を保証することはできません。

于 2013-11-05T01:40:26.770 に答える