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

Objective-C中等效的Java javax.crypto库?,java,objective-c,encryption,Java,Objective C,Encryption,我用Java做了以下工作,我想用Objective-C做同样的工作(减去Base64位,我已经开始工作了): 有没有Objective-C库可以帮助我做同样的事情 *更新* 只是更新-我运行了以下代码,但是out显示为空: NSData *keyData = [PRIVATE_KEY dataUsingEncoding:NSUTF8StringEncoding]; NSData *clearTextData = [data dataUsingEncoding:NSUTF8StringEncodi

我用Java做了以下工作,我想用Objective-C做同样的工作(减去Base64位,我已经开始工作了):

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

看看这一节。它包括各种与密码相关的算法,包括SHA1、HMAC和MD5。与许多Objective-C代码相比,它们的级别相当低,但只要你知道指针,它们就相当直接。

我最近参与了另一个在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];

当它返回out数据时,我得到null,并且我检查了secretKey和signStr是否有效。我会用我得到的更新答案。你导入了“CommonCrypto/CommonHMAC.h”吗?我忘了提那个了。在CCHmacFinal后面放一个断点,然后观察digest的值。它应该是uint8_t[20],并且值应该不是nil。您可能还需要NSData+Additions类别来获得NSData中的Base64支持。是的,我解决了问题。无法将加密数据转换为NSString,因为无法正确解释该数据。所以,我所做的是首先对NSData进行bsae64编码,然后将其用作字符串,因为它使用NSString可以识别的字符。
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];