C# 如何将CSP参数传递给另一个RSACryptServiceProvider以对其进行加密和解密

C# 如何将CSP参数传递给另一个RSACryptServiceProvider以对其进行加密和解密,c#,xamarin.forms,cryptography,rsacryptoserviceprovider,C#,Xamarin.forms,Cryptography,Rsacryptoserviceprovider,我目前正在与Xamarin和WCF一起进行一个项目,在该项目中,WCF将在WCF处生成CSPCParameter,并将Blob传递给Xamarin CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = KEY_CONTAINER_NAME; cspParams.Flags = CspProviderFlags.UseArchivableKey | CspProviderFlags.NoPrompt

我目前正在与Xamarin和WCF一起进行一个项目,在该项目中,WCF将在WCF处生成CSPCParameter,并将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的字节[]

rsaProvider.ExportCspBlob(false)
在客户端(Xamarin应用程序),我重新创建CSP参数,并使用下面的代码加密文本,然后发送回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的创建与原始CspBlob参数不同

我能知道有没有人对解决办法有什么建议?谢谢。

请从

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

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