md5とsha1を求める方法

ソースコード

#import <CommonCrypto/CommonDigest.h>

+ (NSString *) sha1:(NSString *)input
{
	const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
	NSData *data = [NSData dataWithBytes:cstr length:input.length];
	uint8_t digest[CC_SHA1_DIGEST_LENGTH];
	CC_SHA1(data.bytes, data.length, digest);
	NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
	for ( int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++ ) {
		[output appendFormat:@"%02x", digest[i]];
	}
	return output;
}

+ (NSString *) md5:(NSString *)input
{
	const char *cStr = [input UTF8String];
	unsigned char digest[16];
	CC_MD5( cStr, strlen(cStr), digest );
	NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
	for ( int i = 0; i < CC_MD5_DIGEST_LENGTH; i++ ) {
		[output appendFormat:@"%02x", digest[i]];
	}
	return  output;
}

テストコード

NSLog( @"%@", [ViewController sha1:@"hoge"] );
NSLog( @"%@", [ViewController md5:@"hoge"] );

Effective Objective-C 2.0

Effective Objective-C 2.0

検証

出力結果

31f30ddbcb1bf8446576f0e64aa4c88a9f055e3c
ea703e7aa1efda0064eaa507d9e8ab7e

他の方法で計算

$ echo -n "hoge" | openssl sha1
(stdin)= 31f30ddbcb1bf8446576f0e64aa4c88a9f055e3c

$ echo -n "hoge" | md5
ea703e7aa1efda0064eaa507d9e8ab7e

ハッシュ値は合ってますね!

入門 Objective-C 2.0 (Programmer’s SELECTION)

入門 Objective-C 2.0 (Programmer’s SELECTION)