2012-03-07 30 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にunsigned char型の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進数の代わりにコード化されたbase64で値を取る方法を教えてくれますか?それは非常に役に立つだろう:) – Abhrajit

+0

いいえ問題。私はとにかくそれを持っている...私自身の機能を設計:) – Abhrajit

関連する問題