Objective-C中的等效Java javax.crypto库?

时间:2011-06-22 15:25:56

标签: java objective-c encryption

我正在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出现了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]]);

2 个答案:

答案 0 :(得分:1)

查看3cc of the manual部分。它包括各种与加密相关的算法,包括SHA1,HMAC和MD5。与许多Objective-C代码相比,它们相当低级,但只要你知道指针,它们就非常直接。

答案 1 :(得分:1)

我最近参与了另一个在iPhone上执行HMAC-SHA1的项目。你走了!

密钥是在名为secretKey的NSString中编码的Base64 要签名的字符串位于名为signString的NSString中。如果您已经拥有NSData,只需使用它而不是clearTextData。

输出签名将在base64Enc中,或者如果您不想对其进行编码,则只需“输出”。

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