次の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 と言うと奇妙な文字が表示されます。私が本当に欲しいのは16進文字列ですが、それを取得する方法がわかりません。これは iPhone 3.0 SDK を使用しています。
現時点では、渡した文字列はすべてNULLに戻ります。