2017-01-12 11 views
-1

Xcode C++에서 MD5를 사용하여 간단한 문자열을 해시하고 싶습니다. 많이 검색했지만 튜토리얼을 찾을 수 없습니다. 나는 #import <CommonCrypto/CommonDigest.h>해야만한다. 그게 다야? 어떻게하면 MD5를 부를 수 있습니까? 이 코드를 발견했지만 오류가 발생합니다. 문자열 변수에서 업데이트 된 값은 어떻게됩니까?Xcode C++ MD5 해시

unsigned char digest[16]; 
const char* string = "Hello World"; 
struct MD5Context context;  **(error: variable has incomplete type 
MD5Init(&context); 
MD5Update(&context, string, strlen(string)); 
MD5Final(digest, &context); 

난 단순한 명령 줄 응용 프로그램을 사용하지 않고 단지 기본 main.cpp 안에 헤더가 없습니다. 정말 도움을 주셔서 감사합니다 !!!!

#include <CommonCrypto/CommonDigest.h> 

unsigned char digest[16]; 
const char* string = "Hello World"; 

CC_MD5(string, (CC_LONG)strlen(string), digest); 
당신은 Security.framework을 포함해야합니다

(또는 임대에 해당 라이브러리 파일) :

+0

'# include'는 아마도 올바른 함수 이름과 타입을 사용하는 것처럼 C++ 컴파일러를 더 행복하게 만들 것입니다. 모든 것은 CC_에서 시작합니다. – WhozCraig

+0

아, 네가 obj C 내 잘못했다는 것에 감사한다. – Tom

+0

감사합니다.이 설명서를 찾았고 제안대로 업데이트했습니다. 하지만 여전히 변수에 대한 오류가 발생합니다. 추가 라이브러리를 포함해야합니까? https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/CC_MD5.3cc.html#//apple_ref/doc/man/3cc/CC_MD5 – Tom

답변

1

잘못된 API를 사용하고 있습니다. 나는 당신이 (그들은 OpenSSL을 호출과 같이)에서 사람들을 얻고있는 곳 모르겠지만, 그것은 다음과 같아야합니다

#include <stdio.h> 
#include <string.h> 

#include <CommonCrypto/CommonDigest.h> 

int main() 
{ 
    unsigned char digest[CC_MD5_DIGEST_LENGTH]; 
    const char string[] = "Hello World"; 

    CC_MD5_CTX context; 
    CC_MD5_Init(&context); 
    CC_MD5_Update(&context, string, (CC_LONG)strlen(string)); 
    CC_MD5_Final(digest, &context); 

    for (size_t i=0; i<CC_MD5_DIGEST_LENGTH; ++i) 
     printf("%.2x", digest[i]); 
    fputc('\n', stdout); 
    return 0; 
} 

출력

b10a8db164e0754105b7a99be72e3fe5 

인증 됨 here.

1

는 원샷 버전이 있습니다.

+0

답변 주셔서 감사합니다! 나는 또한 귀하의 솔루션을 시도했지만 오류 메시지를 제공합니다 : "암시 적 변환 부호없는 int 정수 정밀도 부호없는 long 손실됩니다. 그리고 마지막 줄 strlen (문자열) 가리 킵니다. 추가 할 경우 (CC_LONG) strlen (문자열) 수정합니다 오류하지만 인쇄하려고하면이처럼 좀 미친 것을 제공 다이제스트. 사용법 #include 사용법 #include 사용법 #include : 261 \ 261d \ 215 \ ...... 나는이 포함되어있다 \ #include . – Tom

+0

올바른 캐스팅이 필요합니다. MD5는 데이터를 반환하고 ASCII 출력이 16 진수 또는 Base64로 인코딩되어야하는 경우 대부분의 데이터 값은 ASCII가 아닙니다. – zaph

+0

예 16 진수가 필요합니다. 필자의 제안에 따라 MD5 fn에서 직접 헥스를 출력하는 방법은 무엇입니까? 일반적으로 출력을 변환하려고합니다. 그러나 나는 내가 무엇을 개종시키고 있는지 알지 못한다. 도와 줘서 고마워! – Tom