我有以下的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