RSACryptoServiceProvider.VerifyData 在 .Net5.0 中始终返回 false

Posted

技术标签:

【中文标题】RSACryptoServiceProvider.VerifyData 在 .Net5.0 中始终返回 false【英文标题】:RSACryptoServiceProvider.VerifyData always returns false in .Net5.0 【发布时间】:2021-06-17 09:25:07 【问题描述】:

我目前正在将一些库从 .netstandard2.0 迁移到 .net5.0,并偶然发现了一种我无法真正理解的奇怪行为,即它在 .netstandard2.0 中可以正常工作,但在 .net5.0 中就不行了。我以前从未使用过任何加密代码,所以我可能会错过一些明显的观点。

我能够将我的问题分解为以下几点:

var cpParams = new CspParameters  KeyContainerName = KEY_CONTAINER ;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams);
rsa.ImportCspBlob(...);
byte[] signature = rsa.SignData(byteArray, new SHA1CryptoServiceProvider());
var isValid = rsa.VerifyData(byteArray, new SHA1CryptoServiceProvider(), signature)

isValid 显然应该是真的,我们也可以在 .netstandard2.0 中验证。

但是,在迁移到 .net5.0 之后,isValid 为 false。

我做了一些研究,但找不到任何解释。

有人对此有更深入的了解吗?

【问题讨论】:

【参考方案1】:

我遇到了类似的问题。 CspParametersKeyNumber 初始化为 -1,随后,ImportCspBlobKeyNumber 属性从 2 更改为 1,无论出于何种原因。

尝试设置以下内容,ImportCspBlob 会正常运行。

CspParameters.KeyNumber = (int)KeyNumber.Signature 

【讨论】:

以上是关于RSACryptoServiceProvider.VerifyData 在 .Net5.0 中始终返回 false的主要内容,如果未能解决你的问题,请参考以下文章

RSACryptoServiceProvider 工作正常吗?

如何使用先前使用 RSACryptoServiceProvider 加密的 RSACng 解密数据

如何提取 RSACryptoServiceProvider 生成的素数?

C# - RSACryptoServiceProvider - 错误:错误数据

从公钥正确创建 RSACryptoServiceProvider

这个 C# RSACryptoServiceProvider 方法的红宝石等价物是啥