小编Ste*_*ood的帖子

使用X509私钥在dotnet core v2(SHA256)中签名数据

我无法在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核心签名数据未通过签名验证检查。从理论上讲,它应该与什么签名方法没有什么区别,所以这应该起作用,但是没有作用。 …

.net c# cryptography .net-core

6
推荐指数
2
解决办法
5535
查看次数

标签 统计

.net ×1

.net-core ×1

c# ×1

cryptography ×1