【问题标题】:Get private key file with sha256 in C #在 C# 中使用 sha256 获取私钥文件
【发布时间】:2017-04-10 06:49:09
【问题描述】:

目前我是通过openssl进行这个操作,生成的文件没有问题

openssl dgst -sha256 -sign privateKey.key -out file.txt.signature file.txt

现在,我们想使用 C# 自动生成文件,但我无法得到相同的结果。

public class Program
{

    static void Main(string[] args)
    {
        Console.WriteLine(CreateToken("key...", "text"));
        Console.ReadLine();
    }

    public static string CreateToken(string key, string message)
    {
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        byte[] keyByte = encoding.GetBytes(key);

        HMACSHA256 hmacsha256 = new HMACSHA256(keyByte);

        byte[] messageBytes = encoding.GetBytes(message);
        byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);

        return System.Text.Encoding.UTF8.GetString(hashmessage);
    }

}

我是新手,正确的方法是什么?

我没有正确检索信息吗?我应该直接从文件中获取内容吗?

非常感谢。

【问题讨论】:

标签: c# openssl digital-signature sha256


【解决方案1】:

签名生成与 HMAC 消息身份验证不同,它使用不同的密钥。由于 HMAC 可以使用任何大小的密钥,它可能会使用私钥,但这不是它应该如何工作的。 RSA 是一种使用私钥和公钥的非对称算法,MAC 使用对称的秘密密钥。 dgst -sign 改为使用 RSA PKCS#1 v1.5 填充来签署文件。

来自OpenSSL Wiki on dgst

签名文件时,dgst 将根据私钥的 ASN.1 信息自动确定用于签名的算法(RSA、ECC 等)。在验证签名时,它只处理 RSA、DSA 或 ECDSA 签名本身,而不是用于识别 x.509、CMS 和 S/MIME 等格式中使用的签名者和算法的相关数据。

HMAC 也与 SHA-256 不同。 RSA 签名生成使用散列,而不是 HMAC。您应该使用 SHA256 class 创建哈希。 HMAC 是一个消息身份验证代码使用 SHA-256 哈希构建。但是,不需要 SHA 类,因为签名生成通常包括散列生成(您签署消息,而不是散列值)。

因此,要创建签名,请查看RSAPKCS1SignatureFormatter 类,它在底部包含一个示例。使用此示例重试。

确保您的消息仅包含 ASCII(在文本文件中和在您的字符串中),否则您的结果也可能会失败。

【讨论】:

  • 如果你偏离了正确的道路,你可能已经从世界的边缘跌落了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2013-12-23
  • 2020-03-21
  • 2011-11-05
相关资源
最近更新 更多