2

clearTextDataキーを使用して暗号化するために、次のことを試みましたkeyData。そして、これらの値の両方が有効であり、通過していることを確認するためにチェックしました。

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)

何か案は?

* アップデート *

渡すキーとデータの例を次に示します。

キー:983745hjhgfd3454

データ:{"data": "lala"、 "pubKey": "75948458"、 "sig": "val"}

4

1 に答える 1

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]);
于 2011-06-22T18:38:00.573 に答える