OpenSSL의 HMAC 기능을 사용하여 키를 사용하여 SHA256 해시를 만들려고합니다. HMAC_Init_ex를 호출 한 후 내 스택이 계속 손상됩니다 (모든 값은 0으로 설정 됨). Xcode를 사용하고 OS X 10.8.5를 실행 중입니다. 터미널에서 "openssl version"을 실행하면 "OpenSSL 0.9.8y 5 Feb 2013"이 출력됩니다. 이 코드가 작동해야HMAC_Init_ex 손상된 스택 공간
#include <stdio.h>
#include <openssl/hmac.h>
char* hash(char *str, char* key){
int inputLen = strlen(str);
int keyLen = strlen(key);
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, key, keyLen, EVP_sha256(), NULL); // Everything is fine up to here.
HMAC_Update(&ctx, str, inputLen); // By the time this line runs, str and key are NULL, and inputLen and keyLen are 0.
char* ret = malloc(65*sizeof(char));
HMAC_Final(&ctx, ret, 65);
HMAC_CTX_cleanup(&ctx);
ret[65] = '\0';
return ret;
}
:
여기 내 기능과 내 모든 #include
s입니다. 아마도 제 도서관과 관련이 있을지 모르지만 저는 무엇을 모르겠습니다. 라이브러리를 가져올 때 잘못된 점이 있습니까?
업데이트 : 나는 완전히 캡슐화 hmac
함수를 사용하여이 본질적으로 내가 전에 무엇을하고 있었는지와 같은 것을 말한다, 그리고 이상하게 작동 here에서 예를 찾을 . 그래서 나는 내 문제를 우회했지만 다른 사람에게 도움이된다면 대답 할 수 있습니다. 그것은 아마도 내 라이브러리와 관련된 이상한 특정 문제 일 것입니다. 작업 기능 :
char* hash(char *str, char* key){
int inputLen = strlen(str);
int keyLen = strlen(key);
unsigned int retLen = 65;
char* ret = emalloc(retLen*sizeof(char));
ret = HMAC(EVP_sha256(), key, keyLen, (unsigned char*)str, inputLen, NULL, NULL);
return ret;
}
당신의 컴파일 명령은 무엇입니까, 방법 다이제스트 암호화 방법을 제공합니다? 또한,'HMAC_CTX_init'과'HMAC_Init_ex'의 반환 값을 확인하십시오. – ooga
@ooga 둘 다 무효입니다. 죄송합니다. Xcode를 사용하여이 기능을 구현하고 있습니다. 나는 컴파일 명령을 검사하는 방법이 있는지 모르겠다. – sudo
'HMAC_CTX_init' 다음에'ctx'를 검사했는데 이상한 점이 전혀 없었지만 정확히 어떻게 생겼는지 모르겠습니다. – sudo