c# - 如何在C#中使用SHA256withRSA算法进行签名

标签 c# rsa sha256 rsa-sha256

我尝试了针对我的查询的搜索解决方案,我无法找到我正在寻找的匹配项,这是非常基本的,但为了我更好地理解,我将在查询下方发布。

我想使用“SHA256withRSA”算法对我的字符串进行编码和签名。我可以使用“SHA256withRSA”在 Java 中看到很多示例代码,但在 C# 中我可以看到首先我们使用 SHA256 对数据进行哈希处理,然后我们使用 RSACryptoServiceProvider 对哈希进行签名。

我的问题是:

  1. 在C#中,我们有单独的算法“SHA256withRSA”,如果是,请帮助提供示例代码。

  2. 如果不是,那么用 C# 实现它的更好方法是什么?

最佳答案

首先,您需要一对 key 。要生成 key 对,您可以执行以下操作并使用 OpenSSL:

  1. 生成私钥

    openssl genrsa -out my-private-key.pem 2048

  2. 生成公共(public)证书

    openssl req -new -key my-private-key.pem -x509 -days 36500 -out my-public-cert.pem

  3. 生成p12文件

    openssl pkcs12 -export -in my-public-cert.pem -inkey my-private-key.pem -out my-key-pairs.p12

现在您可以在 C#.NET 中使用以下示例代码来创建数字签名并验证数字签名

    public static string SignData(byte[] data, string pkcs12File, string pkcs12Password)
    {
        X509Certificate2 signerCert = new X509Certificate2(pkcs12File, pkcs12Password, X509KeyStorageFlags.Exportable);
        RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
        rsaCSP.FromXmlString(signerCert.PrivateKey.ToXmlString(true));
        var SignedData = rsaCSP.SignData(data, CryptoConfig.MapNameToOID("SHA256"));
        return Convert.ToBase64String(SignedData);
    }

    public static bool VerifySignature(byte[] data, string signature, string publicCert)
    {
        X509Certificate2 partnerCert = new X509Certificate2(publicCert);
        RSACryptoServiceProvider rsaCSP = (RSACryptoServiceProvider)partnerCert.PublicKey.Key;
        return rsaCSP.VerifyData(data, CryptoConfig.MapNameToOID("SHA256"), Convert.FromBase64String(signature));
    }

请记住,您的项目需要添加对 System.Security 的引用

关于c# - 如何在C#中使用SHA256withRSA算法进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57851612/

相关文章:

python - 在python中将字节字符串转换为十六进制字符串

java - OpenSSL 和 Java 产生不同的 SHA256 RSA 签名

c++ - 计算 sha256 以使用已弃用的 openssl 代码的替代方法

c# - 无法连接到 Redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail。 PING 上的套接字失败

c# - 记录和累积来自不同服务器的异常的最佳方法是什么?

c# - C#回到程序的开头

java - 将 Base64 编码的 CER 文件保存到字符串

c# - 在 Net Framework 中创建 PKCS1 公钥

javascript - ASP.NET MVC Controller 方法从 jQuery 接收空对象

python - Python 中的 openssl_csr_get_public_key