如何在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
相关产品推荐
相关产品推荐

