我有以下的Objective-C的功能:想写的NSString SHA1功能,但它返回null
+(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。
单独问题:这更好地实现为NSString类别而不是类方法。该方法将是 - (NSString *)sha1String。如果你发现你想保留它的类方法,它应该有一个名称,如+(NSString *)sha1StringForString:(NSString *)字符串。 “sha1”(这是一个二进制表示)和sha1String之间的混淆正是你首先遇到麻烦的原因。适当的命名将有助于防止相同类型的后期混淆。 – 2009-08-30 13:53:18