我无法在dotnet core v2.0中重现某些加密功能。这是从.NET 4.5项目移植的代码
.NET 4.5代码
public byte[] SignData(byte[] dataToSign, X509Certificate2 certificate)
{
var rsaCryptoServiceProvider = new RSACryptoServiceProvider();
var xml = certificate.PrivateKey.ToXmlString(true);
rsaCryptoServiceProvider.FromXmlString(xml);
var signedBytes = rsaCryptoServiceProvider.SignData(dataToSign, CryptoConfig.MapNameToOID("SHA256"));
return signedBytes;
}
Run Code Online (Sandbox Code Playgroud)
在dotnet核心中,ToXmlString()and FromXmlString()方法未实现,因此我使用了一个辅助类解决方法。除此之外,dotnet核心实现还可以工作,但是在给定相同的输入数据和证书的情况下,它会产生不同的结果。
dotnet core v2.0代码
public byte[] SignData(byte[] dataToSign, X509Certificate2 certificate)
{
var rsaCryptoServiceProvider = new RSACryptoServiceProvider();
var rsa = (RSA)certificate.PrivateKey;
var xml = RSAHelper.ToXmlString(rsa);
var parameters = RSAHelper.GetParametersFromXmlString(rsa, xml);
rsaCryptoServiceProvider.ImportParameters(parameters);
SHA256 alg = SHA256.Create();
var signedBytes = rsaCryptoServiceProvider.SignData(dataToSign, alg);
return signedBytes;
}
Run Code Online (Sandbox Code Playgroud)
编辑
在.NET 4.5代码库中,dotnet核心签名数据未通过签名验证检查。从理论上讲,它应该与什么签名方法没有什么区别,所以这应该起作用,但是没有作用。 …