簡體   English   中英

在C#中使用sha256獲取私鑰文件

[英]Get private key file with sha256 in C #

目前,我通過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);
    }

}

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

我是否無法正確檢索信息?,是否應該直接從文件中獲取內容?

非常感謝你。

簽名生成與HMAC消息身份驗證不同,它使用不同的密鑰。 由於HMAC可以使用任何大小的密鑰,因此可能會使用私鑰,但這不是應該的方式。 RSA是使用私鑰和公鑰的非對稱算法,MAC使用對稱的秘密密鑰。 而是使用dgst -sign使用RSA PKCS#1 v1.5填充對文件進行簽名。

dgstOpenSSL Wiki

簽名文件時,dgst將基於私鑰的ASN.1信息自動確定用於簽名的算法(RSA,ECC等)。 驗證簽名時,它僅處理RSA,DSA或ECDSA簽名本身,而不處理相關數據來標識以x.509,CMS和S / MIME等格式使用的簽名者和算法。

HMAC與SHA-256也不相同。 RSA簽名生成使用哈希而不是HMAC。 您應該使用SHA256類創建哈希。 HMAC是使用 SHA-256哈希的消息身份驗證代碼構建 但是,不需要SHA類,因為簽名生成通常包括哈希生成(您對消息簽名,而不是哈希值)。

因此,要創建簽名,請查看RSAPKCS1SignatureFormatter類,該類在底部包括一個示例。 使用此示例再試一次。

確保您的消息僅包含ASCII(文本文件中和字符串中都包含),否則結果也可能失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM