Использование CommonCrypto / CommonHMAC для шифрования некоторых данных и всегда возвращается ноль - PullRequest
2 голосов
/ 22 июня 2011

Я попробовал следующее, чтобы зашифровать 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

данные: { "Данные": "Лал", "Публичные": "75948458", "сиг": "Вал"}

1 Ответ

1 голос
/ 22 июня 2011

Эти данные из шифрования - data , и попытка преобразовать его в строку не удалась при кодировании.Вы указываете кодировку UTF8, и я также попробовал кодировку UTF32, и это также не удается.Просто зарегистрируйте возвращенные данные, поскольку эти шестнадцатеричные значения более выгодны, чем строковое представление.

Если вы все еще хотите видеть как можно больше строки, вы можете сделать это.* И у меня также был некоторый успех со следующей строкой. (Печатает строку, отличную от указанной выше)

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