2014-06-08 2 views
0

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; 
} 
+0

당신의 컴파일 명령은 무엇입니까, 방법 다이제스트 암호화 방법을 제공합니다? 또한,'HMAC_CTX_init'과'HMAC_Init_ex'의 반환 값을 확인하십시오. – ooga

+0

@ooga 둘 다 무효입니다. 죄송합니다. Xcode를 사용하여이 기능을 구현하고 있습니다. 나는 컴파일 명령을 검사하는 방법이 있는지 모르겠다. – sudo

+0

'HMAC_CTX_init' 다음에'ctx'를 검사했는데 이상한 점이 전혀 없었지만 정확히 어떻게 생겼는지 모르겠습니다. – sudo

답변

1

당신은 OpenSSL/Initialization 국지적 인 엔진 또는 ssh 설정을 놓쳤다는 등

#include <openssl/engine.h> 
#include <openssl/hmac.h> 

    HMAC_CTX ctx; 

    result = (unsigned char*) malloc(sizeof(char) * result_len); 

    ENGINE_load_builtin_engines(); 
    ENGINE_register_all_complete(); 

    HMAC_CTX_init(&ctx); 
    HMAC_Init_ex(&ctx, key, 16, EVP_sha256(), NULL); 
    HMAC_Update(&ctx, data, 8); 
    HMAC_Final(&ctx, result, &result_len); 
    HMAC_CTX_cleanup(&ctx); 
+0

엔진에 대한 정정을 보내 주셔서 감사하지만 그 두 줄을 추가 한 후에도 나는 여전히 같은 문제를 겪고 있습니다. – sudo

관련 문제