【发布时间】:2009-08-30 12:25:35
【问题描述】:
我有以下 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。
【问题讨论】:
-
单独的问题:这更好地实现为 NSString 上的类别而不是类方法。该方法将是 -(NSString*)sha1String。如果你发现你想把它保留为一个类方法,它应该有一个像 +(NSString*)sha1StringForString:(NSString *)string 这样的名字。 “sha1”(二进制表示)和 sha1String 之间的混淆正是您一开始遇到麻烦的原因。正确命名将有助于防止以后混淆同一类型。
标签: objective-c iphone nsstring nsdata sha1