0

メッセージの署名とメッセージの検証から必要なオプションをメニューから選択できるCプログラムを作成しようとしています。メッセージに署名し、同時に検証するコードがあります。私が望むのは、メッセージを解析して署名できるようにすることでした。これにより、たとえば証明書を出力できます。次に、検証を選択すると、同じメッセージと証明書を挿入するので、実際にメッセージを検証するかどうかを確認できます。

私は次のコードを使用しています: OpenSSL で ECDSA を使用してメッセージに署名する

PS: 基本的に、署名、秘密鍵、公開鍵を実際に印刷する方法がわかりません。

どうもありがとう。

4

2 に答える 2

2

r と s の値を出力する方法を見つけたと思います。署名からの鍵ペア (r,s)

署名を取得したら、次のようにします。

ECDSA_SIG *signature = ECDSA_do_sign(hash, strlen(hash), eckey);

r と s の値は次のように出力できます。

    printf("(sig->r, sig->s): (%s,%s)\n", BN_bn2hex(ECDSA_SIG_get0_r(signature)), BN_bn2hex(ECDSA_SIG_get0_s(signature)));

感謝をこめて

于 2013-03-08T15:27:51.280 に答える
1

これらの関数を使用します。

int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);

ECDSA_SIG* d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);

OpenSSLのドキュメントに従って:

" i2d_ECDSA_SIG() は、ECDSA 署名 sig の DER エンコードを作成し、エンコードされた署名を *pp に書き込みます (注: pp が NULL の場合、i2d_ECDSA_SIG は、DER エンコードされた署名の期待される長さをバイト単位で返します)。i2d_ECDSA_SIG は、DER エンコードされた長さを返します署名 (またはエラーの場合は 0)。

d2i_ECDSA_SIG() は、DER でエンコードされた ECDSA 署名をデコードし、新しく割り当てられた ECDSA_SIG 構造体でデコードされた署名を返します。*sig は、サイズ len の DER エンコードされた署名を含むバッファーを指します。"

画面に署名を印刷したい場合は、Base64にする必要があります:)

于 2013-03-10T10:00:12.963 に答える