2016-11-25 16 views
0

は現在、私は、OpenSSLでこの操作を実行するC#でSHA256と秘密鍵ファイルを取得し、私は我々はCを使用してファイルの生成を自動化したい、

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

今生成されたファイルに問題がなかったしています#しかし、私は同じ結果を得ることができませんでした。

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); 
    } 

} 

私はこれに慣れていますが、正しい方法はありますか?

情報を正しく取得していないのですか?コンテンツをファイルから直接取得する必要がありますか?

ありがとうございました。

+0

通常、メッセージをハッシュする以上のことを行います。 RSA署名とRabin-Williams署名:最先端技術(https://cr.yp.to/sigs/rwsota-20080131.pdf)を参照してください。セクション5、* Hash Randomization *は、あなたにとって興味深いはずです。 – jww

答えて

0

シグネチャ生成は、HMACメッセージ認証と同じではなく、別の鍵を使用します。 HMACは任意のサイズの鍵を使用することができるため、おそらく秘密鍵を取得しますが、それは動作する方法ではありません。 RSAは秘密鍵と公開鍵を使用する非対称アルゴリズムであり、MACは対称秘密鍵を使用します。 dgst -signでは、代わりにRSA PKCS#1 v1.5パディングを使用してファイルに署名します。 OpenSSL Wiki on dgstから

ファイルに署名、自動的に秘密鍵のASN.1の情報に基づいて署名に使用するアルゴリズム(RSA、ECC、など)を決定しますDGST。署名を検証するときは、x.509、CMS、S/MIMEなどの形式で使用される署名者とアルゴリズムを識別するための関連データではなく、RSA、DSA、またはECDSA署名自体を処理します。

HMACはSHA-256と同じものではありません。 RSA署名生成では、HMACではなくハッシュが使用されます。ハッシュを作成するには、SHA256 classを使用する必要があります。 HMACは SHA-256ハッシュを使用してメッセージ認証コードビルドです。ただし、SHAクラスは署名生成として通常は必要ありません。には、ハッシュ生成の(ハッシュ値ではなくメッセージに署名します)が含まれます。

署名を作成するには、RSAPKCS1SignatureFormatterクラスを見てください。下部に例があります。この例を使用して再試行してください。

メッセージにASCII(文字列内のテキストファイルの両方)のみが含まれていることを確認してください。結果が正しく表示されないこともあります。

+0

あなたが正しい道から遠ざかると、あなたは世界の端から落ちたかもしれません。 –

関連する問題