Objective-Cでsha1
http://d.hatena.ne.jp/WaterFlea/20091011/1255242225 を参考にさせてもらい、NSStringを拡張して、実装。
NSData+Hash.h
#import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> @interface NSData (Hash) + (NSData *)utf8Data: (NSString *)string; - (NSData *)sha1Digest; - (NSString *)hexString; - (NSString *)sha1String; @end
NSData+Hash.m
※ No-ARC
#import "NSData+Hash.h" @implementation NSData (Hash) + (NSData *)utf8Data:(NSString *)string { const char *utf8str = [string UTF8String]; NSData *data = [NSData dataWithBytes:utf8str length:strlen(utf8str)]; return data; } - (NSData *)sha1Digest { unsigned char result[CC_SHA1_DIGEST_LENGTH]; CC_SHA1([self bytes], [self length], result); return [NSData dataWithBytes:result length:CC_SHA1_DIGEST_LENGTH]; } - (NSString *)sha1String { return [[self sha1Digest] hexString]; } - (NSString *)hexString { unsigned int i; static const char *hexstr[16] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; const char *dataBuffer = (char *)[self bytes]; NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 2)]; for (i=0; i<[self length]; i++) { uint8_t t1, t2; t1 = (0x00f0 & (dataBuffer[i])) >> 4; t2 = 0x000f & (dataBuffer[i]); [stringBuffer appendFormat:@"%s", hexstr[t1]]; [stringBuffer appendFormat:@"%s", hexstr[t2]]; } return [[stringBuffer copy] autorelease]; } @end
NSString+Hash.h
#import <Foundation/Foundation.h> @interface NSString (Hash) - (NSString *)sha1String; @end
NSString+Hash.m
#import "NSString+Hash.h" #import "NSData+Hash.h" @implementation NSString (Hash) - (NSString *)sha1String { return [[NSData utf8Data:self] sha1String]; } @end
main.m
#import <Foundation/Foundation.h> #import "NSData+Hash.h" #import "NSString+Hash.h" int main (int argc, const char * argv[]) { @autoreleasepool { NSLog(@"%@", [[NSData utf8Data: @"test"] sha1String]); NSLog(@"%@", [@"test" sha1String]); return 0; } }