2017-10-13 11 views
0

現在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のためだと思う。

回避策についてご意見がありましたら教えてください。ありがとう。

答えて

0

byte[] cipherText = rsaProvider.Encrypt(Encoding.UTF8.GetBytes(message), true); 

string cipherText = rsaProvider.Encrypt(Encoding.UTF8.GetBytes(message), true); 

から変更してください。

関連する問題