2 Stimmen

Verwendung von CommonCrypto/CommonHMAC zum Verschlüsseln von Daten, wobei immer null zurückkommt

Ich habe Folgendes versucht, um die Daten zu verschlüsseln clearTextData mit der Taste keyData . Und ich habe überprüft, ob diese beiden Werte gültig sind und durchgehen.

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]]);

Das Protokoll gibt immer an encrypted data: (null)

Irgendwelche Ideen?

* UPDATE *

Hier sind Beispiele für den Schlüssel und die Daten, die ich weitergebe:

Schlüssel: 983745hjhgfd3454

Daten: {"data":"lala","pubKey":"75948458","sig":"val"}

1voto

Joe Punkte 56389

Diese Daten aus dem Krypto sind Daten und der Versuch, sie in eine Zeichenkette umzuwandeln, scheitert an der Kodierung. Sie geben die UTF8-Kodierung an, und ich habe auch die UTF32-Kodierung ausprobiert, die ebenfalls fehlschlägt. Protokollieren Sie einfach die zurückgegebenen Daten, da diese Hex-Werte nützlicher sind als eine String-Darstellung.

Wenn Sie trotzdem so viel wie möglich von der Zeichenkette sehen möchten, können Sie dies tun.

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);

Außerdem hatte ich mit der folgenden Zeile Erfolg (es wird eine andere Zeichenfolge als oben gedruckt)

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X