2012-11-29 10 views
0

다음 코드는 C로, java 코드는 openssl digest different in c compared to java입니다.EVP_Sign 함수를 사용하여 서명을 계산하는 방법

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

내가 직면하고 문제는 자바에 의해 계산 된 서명이 개인 키를 사용하여 수행해야합니다 내가 사용할 수 OpenSSL을에서 SSL 개체가 C. 다른 나옵니다이다.

또한 바로 다음 명령 줄은

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

이 점에서 모든 방향이 도움이 감사 될 것이다 서명을 일치 생성 추가 할 수 있습니다.

+0

이 자바 질문하는 C 질문 또는 C++ 질문인가? Java 코드는 어디에 있습니까? –

+0

이것은 C/C++ 질문이며 자바 코드는 다음 질문에 대한 것입니다. http://stackoverflow.com/questions/13608286/openssl-digest-different-in-c-compared-to-java –

+0

이것은인가? 더블, 이것은 닫혀 야합니다. –

답변

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

+2

맞습니다. 위 코드의 오류는 초기화되지 않은 md_ctx를 사용하고 있다는 것입니다. 여기 실제 수정 사항은 EVP_MD_CTX_init 호출입니다. – Wexxor

+0

설명 해 주셔서 감사합니다. 그래서 만약 우리가 mdcontext 및 서명 컨텍스트를 모두 초기화해야합니다. –

관련 문제