Эквивалентные библиотеки Java javax.crypto в Objective-C? - PullRequest
0 голосов
/ 22 июня 2011

Я делаю следующее в Java, что я хотел бы сделать эквивалент в Objective-C (минус бит Base64, который я уже получил работать):

Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(PRIVATE_KEY.getBytes(),"HmacSHA1");
mac.init(secret);
result =  Base64.encodeToString(mac.doFinal(data), Base64.DEFAULT);

Существуют ли какие-либо библиотеки Objective-C, которые могут помочь мне сделать эквивалент?

* ОБНОВЛЕНИЕ *

Просто обновление - у меня работает следующий код, но out выходит пустым:

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

Ответы [ 2 ]

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

Я недавно работал над другим проектом, который сделал HMAC-SHA1 для iPhone.Вот, пожалуйста!

Секретный ключ - это Base64, закодированный в NSString с именем secretKey Строка для подписи находится в NSString с именем signString.Если у вас уже есть NSData, просто используйте его вместо clearTextData.

Выходная подпись будет в base64Enc или просто 'out', если вы не хотите, чтобы она была закодирована.

NSData *keyData = [NSData dataWithBase64EncodedString:secretKey];
NSData *clearTextData = [signStr 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];
NSString *base64Enc = [out base64Encoding];
1 голос
/ 22 июня 2011

Взгляните на раздел 3cc руководства .Он включает в себя различные алгоритмы шифрования, в том числе SHA1, HMAC и MD5.Они довольно низкоуровневые по сравнению с большим количеством кода Objective-C, но они довольно просты, если вы знаете указатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...