現在WCFでCspParameterを生成し、BlobをXamarinに渡すXamarinとWCFのプロジェクトに取り組んでいます。CspParametersを別のRSACryptoServiceProviderに渡して暗号化を解除し、それを解読する方法
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = KEY_CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseArchivableKey | CspProviderFlags.NoPrompt | CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(KEY_SIZE_BIT, cspParams) { PersistKeyInCsp = true };
後でWCFは、以下のコードを使用してCspBlobのバイト[]を返します。クライアント側(Xamarinアプリ)で
rsaProvider.ExportCspBlob(false)
、私はCspParameterを再作成し、以下のコードを使用してテキストを暗号化および復号化するためにWCF機能に送り返します。
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.ImportCspBlob(cspBlob);
string cipherText = rsaProvider.Encrypt(Encoding.UTF8.GetBytes(message), true);
この時点までにエラーはありません。ただし、復号化中にエラーが発生します。
エラーは「OAEPパディングのデコード中にエラーが発生しました」です。私はオンラインで検索しますが、このエラーは復号化時の無効なメッセージによるものです。
同じCspParameterを使用する別のフローをテストしました(WCFを通過せずに同じフロー内ですべてを実行する)ので、暗号化と復号化にエラーは発生しません。だから私はそれがImportCspBlobが元のCspParameterと同じように作成されていないExportCspBlobのためだと思う。
回避策についてご意見がありましたら教えてください。ありがとう。