繁体   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