簡體   English   中英

如何將 CspParameters 傳遞給另一個 RSACryptoServiceProvider 進行加密和解密

[英]How to pass CspParameters to another RSACryptoServiceProvider to encryption and Decrypt it

我目前正在使用 Xamarin 和 WCF 進行一個項目,其中 WCF 將在 WCF 生成 CspParameter 並將 Blob 傳遞給 Xamarin。

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 的 byte[]。

rsaProvider.ExportCspBlob(false)

在客戶端(Xamarin 應用程序),我重新創建 CspParameter 並使用下面的代碼加密文本,然后發送回 WCF 函數進行解密。

RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.ImportCspBlob(cspBlob);

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

到目前為止,沒有錯誤。 但是,在解密過程中,出現錯誤。

CspParameters cspParams = new CspParameters() { KeyContainerName = KEY_CONTAINER_NAME };
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams);

byte[] decryptBytes = rsaProvider.Decrypt(cipherBytes, true); //Error here

錯誤是“解碼 OAEP 填充時發生錯誤。”。 我在網上搜索,這個錯誤是由於解密時無效的消息。

我測試了另一個流,它使用相同的 CspParameter(不通過 WCF 並在同一流中執行所有操作)來加密和解密,沒有拋出錯誤。 所以我懷疑這是因為 ExportCspBlob,其中 ImportCspBlob 的創建方式與原始 CspParameter 不同。

我可以知道是否有人對解決方法有任何建議嗎? 謝謝。

請從

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM