2012-03-07 4 views
1

저는이 질문에 너무 익숙하지 않으므로 사소한 것처럼 보일 수 있습니다. 부모님 이름으로 전화하지 마세요 ... 서명하지 않은 char 및 NSString .. 할당하고 싶습니다. 문자열에 char 값 ...이 unsigned char를 NSString으로 변환

NSString *passwordDgst = @"somepassword"; 
unsigned char passwordDgstchar[CC_SHA512_DIGEST_LENGTH]; 
CC_SHA512(passwordDgst, 
      passwordDgst.length, 
      passwordDgstchar); 

지금 내가 문자열 passwordDgst에 서명 숯불의 passwordDgstchar의 값을 할당 할 .. 코드 조각입니다. 어떻게하면 될까요?

답변

4

여기에 몇 가지 문제가 있습니다. 이 함수는 바이너리 입력이고 이진 출력을 제공합니다. 코드는 문자열 객체의 처음 12 바이트의 해시를 계산합니다. 먼저 NSData로 변환해야합니다.

NSData* input = [passwordDgst dataUsingEncoding: NSUTF8StringEncoding]; // Could use UTF16 or other if you like 
unsigned char passwordDgstchar[CC_SHA512_DIGEST_LENGTH]; 
CC_SHA512([input bytes], 
      [input length], 
      passwordDgstchar); 

passwordDgstchar에는 이제 원시 이진수로 digiest가 포함됩니다. 그것을 (말하자면) 16 진수로 변환하려면 :

NSMutableString* sha512 = [[NSMutableString alloc] init]; 
for (int i = 0 ; i < CC_SHA512_DIGEST_LENGTH ; ++i) 
{ 
    [sha512 appendFormat: @"%02x", passwordDgstChar[i]; 
} 
+0

감사합니다. Jeremy.하지만 16 진수 대신 16 진수로 인코딩 된 값을 가져 오는 방법을 알려주시겠습니까? 그게 아주 도움이 될거야 :) – Abhrajit

+0

아니 문제 .. 나는 어쨌든 그것을 가지고 ... 내 자신의 기능을 설계 :) – Abhrajit