2017-10-13 36 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); 
相关问题