【问题标题】:C# Signature Matching with Public KeyC# 签名与公钥匹配
【发布时间】:2019-05-27 19:17:14
【问题描述】:

我正在与试图建立双向数字签名匹配的第三方合作。在我这边,我们使用 C#,而第三方使用 Java。到目前为止,我能够在 OpenSSL 中生成密钥配对并使用私钥生成他们能够在其 Java 环境中匹配的签名(下面的 C# 代码)。反方向,如何使用生成的公钥创建匹配签名?

我尝试使用下面相同的代码,只是在导入公钥时更改 CngKeyBlobFormat,但所有其他类型都会产生错误。

在双方都使用以下 OpenSSL 命令来生成公钥和私钥:

openssl genrsa -des3 -out my_rsa_key_pair 2048

openssl pkcs8 -topk8 -inform PEM -in my_rsa_key_pair -outform PEM -out private_key.pem -nocrypt

openssl rsa -in my_rsa_key_pair -outform PEM -pubout -out public_key.pem

这是用于从私钥生成签名的 C# 代码:

byte[] keyBytes = Convert.FromBase64String(privateKey);
byte[] valueBytes = Encoding.UTF8.GetBytes(stringToSign);
byte[] signedBytes;

using (CngKey key = CngKey.Import(keyBytes, CngKeyBlobFormat.Pkcs8PrivateBlob))
using (RSA rsa = new RSACng(key))
{
    signedBytes = rsa.SignData(valueBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
    return Convert.ToBase64String(signedBytes);
}

使用公钥,我需要在 C# 中生成与使用私钥生成的签名相匹配的签名。这样做的正确方法是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

    有很多关于签名生成/验证的帖子,在找到正确的关键词后,我在下面的帖子中找到了答案。鉴于上述生成公钥/私钥对的代码和方法,本文中的答案将成功验证仅使用公钥的私钥生成的签名。让任何搜索解决方案双方的人都可以打开它: Verify signature generated with RSA 2048-bit key, SHA256 algorithm and PKCSv1.5 padding

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多