2011-06-22 6 views
2

keyDataを使用してclearTextDataを暗号化しようとしました。そして、私はこれらの値の両方が有効で、通過していることを確認しました。CommonCrypto/CommonHMACを使用してデータを暗号化し、常にnullに戻る

NSData *keyData = [PRIVATE_KEY dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *clearTextData = [data dataUsingEncoding:NSUTF8StringEncoding]; 

uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; 

CCHmacContext hmacContext; 
CCHmacInit(&hmacContext, kCCHmacAlgSHA1, keyData.bytes, keyData.length); 
CCHmacUpdate(&hmacContext, clearTextData.bytes, clearTextData.length); 
CCHmacFinal(&hmacContext, digest); 

NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; 

NSLog(@"encrypted data: %@", [NSString stringWithUTF8String:[out bytes]]); 

ログは常にencrypted data: (null)

任意のアイデアを言って戻ってきますか?

* UPDATE *

は、ここで私は渡していますキーとデータの例を示します。

をキー:983745hjhgfd3454

データ: { "データを": "ララ" 、 "pubKey": "75948458"、 "sig": "val"}

+1

アンHMACは、暗号化ではありません。 –

答えて

1

このデータは暗号化されたものですデータを読み込み、文字列に変換しようとするとエンコードに失敗します。あなたはUTF8エンコーディングを指定していますが、UTF32エンコーディングも試みましたが、それも失敗します。これらの16進数値は文字列表現よりも有益であるため、返されたデータをログに記録するだけです。

可能な限り文字列を表示したい場合は、これを行うことができます。

NSData *output = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; 

    //This is useful 
NSLog(@"encrypted data: %@", output); 

    //Not useful but you may be able to visualize some of the string 
char *outstr = malloc(sizeof(char) * (CC_SHA1_DIGEST_LENGTH + 1)); 
memcpy(outstr, [output bytes], CC_SHA1_DIGEST_LENGTH); 
outstr[CC_SHA1_DIGEST_LENGTH] = 0; 
NSLog(@"encrypted data string: %s", outstr); 
free(outstr); 

そして、私はまた、次の行でいくつかの成功を持っていた。(上記とは異なる文字列を出力します)

NSLog(@"encrypted data: %@", [[[NSString alloc] initWithData:output encoding:NSISOLatin2StringEncoding] autorelease]); 
+0

ありがとうジョー - ええ私はそれをもう少しデバッグした後にそれを理解し終わった。私がやったことは、暗号化されたデータをbase64でエンコードすることでした。これは通常の文字列として表現することができ、それをうまく解釈します。ご協力いただきありがとうございます :) – xil3

関連する問題