我有以下 Objective-C 函数:
+(NSString *)stringToSha1:(NSString *)str{
NSMutableData *dataToHash = [[NSMutableData alloc] init];
[dataToHash appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
CC_SHA1([dataToHash bytes], [dataToHash length], hashBytes);
NSData *encodedData = [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
[dataToHash release];
NSString *encodedStr = [NSString stringWithUTF8String:[encodedData bytes]];
//NSString *encodedStr = [[NSString alloc] initWithBytes:[encodedData bytes]
// length:[encodedData length] encoding: NSUTF8StringEncoding];
NSLog(@"String is %@", encodedStr);
return encodedStr;
}
我想要做的是采用 NSString 和 SHA1 对其进行编码。那部分似乎正在工作,我认为我失败的地方是如何将 NSData 对象转换回清晰的字符串。如果我使用 UTF8 编码,我会得到空白,如果我说 ASCII,我会得到奇怪的字符。我真正想要的是十六进制字符串,但我不知道如何得到它。这是使用 iPhone 3.0 SDK。
目前,我传入的任何字符串都返回为 NULL。