You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中通过PEM私钥实现SHA256withRSA签名(Java转C#)

把Java的SHA256withRSA签名代码转为C#实现

以下是对应你Java代码的C#实现,功能完全一致:通过Base64编码的PKCS8格式私钥对输入字符串进行SHA256withRSA签名,返回Base64编码的签名结果。

using System;
using System.Security.Cryptography;
using System.Text;

public static class RsaSignatureHelper
{
    public static string SignSHA256RSA(string input, string privateKeyPkcs8Base64)
    {
        // 解码Base64格式的PKCS8私钥字节
        byte[] privateKeyBytes = Convert.FromBase64String(privateKeyPkcs8Base64);
        
        using (RSA rsa = RSA.Create())
        {
            // 导入PKCS8格式私钥
            rsa.ImportPkcs8PrivateKey(privateKeyBytes, out int _);
            
            // 转换输入字符串为UTF-8编码字节
            byte[] inputBytes = Encoding.UTF8.GetBytes(input);
            
            // 执行SHA256withRSA签名(对应PKCS#1 v1.5填充,和Java的SHA256withRSA逻辑一致)
            byte[] signatureBytes = rsa.SignData(inputBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            
            // 将签名结果转为Base64字符串返回
            return Convert.ToBase64String(signatureBytes);
        }
    }
}

注意事项

  • 该代码兼容.NET Core 3.0+、.NET 5+以及.NET Framework 4.7.2+,这些版本原生支持ImportPkcs8PrivateKey方法
  • 如果你的私钥是标准PEM格式(带-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----头部尾部),需要先清理格式再传入:
    // 处理PEM格式私钥示例
    string pemPrivateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...\n-----END PRIVATE KEY-----";
    string cleanPkcs8Base64 = pemPrivateKey
        .Replace("-----BEGIN PRIVATE KEY-----", "")
        .Replace("-----END PRIVATE KEY-----", "")
        .Replace("\n", "")
        .Replace("\r", "");
    
    // 调用签名方法
    string signature = RsaSignatureHelper.SignSHA256RSA("你的输入内容", cleanPkcs8Base64);
    
  • 签名过程中若出现密钥格式错误、加密操作失败等问题,会抛出CryptographicException,可根据业务需求捕获处理

内容的提问来源于stack exchange,提问作者Rajeev Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:45:30