在 .NET 上使用 RSA 私钥对字符串进行签名?

发布于 2024-09-08 01:30:43 字数 634 浏览 5 评论 0原文

byte[] plaintext = System.Text.Encoding.UTF8.GetBytes("AAAAAAAAAAAAA");

TextReader trCer = new StreamReader(@"AA.key"); //key in PEM format

PemReader rdCer = new PemReader(trCer);

AsymmetricCipherKeyPair o = rdCer.ReadObject() as AsymmetricCipherKeyPair;

ISigner sig = SignerUtilities.GetSigner("MD5WithRSAEncryption");

sig.Init(true, o.Private);

sig.BlockUpdate(plaintext,0,plaintext.Length);

Byte[] signature  = sig.GenerateSignature();

string signatureHeader = Convert.ToBase64String(signature);

Console.WriteLine(signatureHeader);

如何使用 DER 格式的密钥? 我正在使用库 BouncyCastle.Crypto.dll

`

byte[] plaintext = System.Text.Encoding.UTF8.GetBytes("AAAAAAAAAAAAA");

TextReader trCer = new StreamReader(@"AA.key"); //key in PEM format

PemReader rdCer = new PemReader(trCer);

AsymmetricCipherKeyPair o = rdCer.ReadObject() as AsymmetricCipherKeyPair;

ISigner sig = SignerUtilities.GetSigner("MD5WithRSAEncryption");

sig.Init(true, o.Private);

sig.BlockUpdate(plaintext,0,plaintext.Length);

Byte[] signature  = sig.GenerateSignature();

string signatureHeader = Convert.ToBase64String(signature);

Console.WriteLine(signatureHeader);

How I can use a key in DER format?
I'm using the library BouncyCastle.Crypto.dll

`

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只是我以为 2024-09-15 01:30:43

您应该使用 OpenSslder 文件转换为 pem 文件:

openssl x509 -inform der -in certificate.cer -out certificate.pem

然后使用 BountyCastle 从 pem 生成符号 像这样:

using (var rsa = new RSACryptoServiceProvider())
            {
                var privateKey = new StringBuilder();
                privateKey.AppendLine("-----BEGIN RSA PRIVATE KEY-----");
                privateKey.AppendLine(_config.Value.PrivateKey);
                privateKey.AppendLine("-----END RSA PRIVATE KEY-----");

                var pem = new PemReader(new StringReader(privateKey.ToString()));
                var keyPair = (AsymmetricCipherKeyPair)pem.ReadObject();
                var privateKeyParameters = (RsaPrivateCrtKeyParameters)keyPair.Private;
                var rsaParameters = DotNetUtilities.ToRSAParameters(privateKeyParameters);

                rsa.ImportParameters(rsaParameters);
                var sign = rsa.SignData(Encoding.UTF8.GetBytes(data), new HashAlgorithmName("SHA1"),
                    RSASignaturePadding.Pkcs1);

                return Convert.ToBase64String(sign);
            }

上面的代码片段使用私钥作为字符串,并将其包装为 pem 格式。

You should convert der file to pem file using OpenSsl:

openssl x509 -inform der -in certificate.cer -out certificate.pem

And then generate sign from pem using BountyCastle like this:

using (var rsa = new RSACryptoServiceProvider())
            {
                var privateKey = new StringBuilder();
                privateKey.AppendLine("-----BEGIN RSA PRIVATE KEY-----");
                privateKey.AppendLine(_config.Value.PrivateKey);
                privateKey.AppendLine("-----END RSA PRIVATE KEY-----");

                var pem = new PemReader(new StringReader(privateKey.ToString()));
                var keyPair = (AsymmetricCipherKeyPair)pem.ReadObject();
                var privateKeyParameters = (RsaPrivateCrtKeyParameters)keyPair.Private;
                var rsaParameters = DotNetUtilities.ToRSAParameters(privateKeyParameters);

                rsa.ImportParameters(rsaParameters);
                var sign = rsa.SignData(Encoding.UTF8.GetBytes(data), new HashAlgorithmName("SHA1"),
                    RSASignaturePadding.Pkcs1);

                return Convert.ToBase64String(sign);
            }

Above snipped code use private key as a string and I wrap it into pem format.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文