我用C语言编写了以下代码,java代码位于openssl digest different in c compared to java。
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在这方面的任何方向都将是有帮助的,谢谢。
发布于 2012-11-29 19:45:53
替换了以下内容,并获得了正确的结果。
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
https://stackoverflow.com/questions/13621137
复制相似问题