0

私はCで次のコードを持っています.Javaコードはopensslダイジェストにあり、cとは異なります。

EVP_MD_CTX md_ctx;
unsigned char sig_buf[4096];
/* Do the signature */
int err;
unsigned int sig_len;
String testSign = "c14N string ";
EVP_SignInit(&md_ctx, EVP_sha256());
EVP_SignUpdate(&md_ctx, testSign.c_str(), testSign.size());
sig_len = sizeof(sig_buf);
err = EVP_SignFinal(&md_ctx, sig_buf, &sig_len, privKey);
if (err != 1) {
    perror("Error While generating Signature for Security Token");
    return "Null Signature";
}
return calculateBase64(sig_buf,sig_len);

私が直面している問題は、Java によって計算された署名が C とは異なることです。これは秘密鍵を使用して行う必要があり、OpenSSL からの SSL オブジェクトが利用可能です。

また、次のコマンドラインを追加するだけで、一致する署名が生成されます

echo -n "String here" | openssl dgst -dss1 -sha256 -sign client.key |openssl base64

この点に関する指示は役に立ちます。

4

1 に答える 1

2

以下を置き換えて、正しい結果を得ました。

EVP_MD_CTX_init(&md_ctx);
EVP_SignInit_ex(&md_ctx, EVP_sha256(),NULL);
EVP_MD_CTX_cleanup(&md_ctx);

参照 : http://www.nlnetlabs.nl/downloads/publications/hsm/hsm_node22.html

于 2012-11-29T11:45:52.977 に答える