0
我目前正在使用Xamarin和WCF處理項目,其中WCF將在WCF中生成CspParameter並將Blob傳遞給Xamarin。如何將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的字節[]。
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相同。
我想知道是否有人對解決方法有任何建議嗎?謝謝。