2017-10-13 47 views
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相同。

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

回答

0

請更改從

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

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