我在 C 中有以下代码,与 java相比,java 代码在 c 中的 openssl 摘要不同。
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
这方面的任何指示都会有所帮助,谢谢。