を返しています:はSHA1機能をNSStringの書き込もうとしたが、それは私が次の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に戻ってきます。
別名:クラスメソッドではなくNSStringのカテゴリとして実装するのが良いです。メソッドは - (NSString *)sha1Stringになります。それをクラスメソッドにしておきたい場合は、+(NSString *)sha1StringForString:(NSString *)文字列のような名前が必要です。 "sha1"(バイナリ表現)とsha1Stringの間の混乱は、まさにあなたが最初に問題を抱えていた理由です。適切な命名は、後で同じタイプの混乱を防ぐのに役立ちます。 –