.h file:
#import <Foundation/Foundation.h> @interface NSData (NSData_HexAdditions) - (NSString*) stringWithHexBytes; + (NSString*) sha256HashFromString:(NSString*)string; + (NSString*) sha256HashFromData:(NSData*)data; @end
.m file:
#import "NSData+Util.h" #import <CommonCrypto/CommonDigest.h> @implementation NSData (NSData_HexAdditions) - (NSString*) stringWithHexBytes { NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 2)]; const unsigned char *dataBuffer = [self bytes]; int i; for (i = 0; i < [self length]; ++i) [stringBuffer appendFormat:@"%02x", (unsigned long)dataBuffer[ i ]]; return [[stringBuffer copy] autorelease]; } + (NSString*) sha256HashFromData:(NSData*)data { return [NSData sha256HashFromString:[NSString stringWithCString:(const char*)[data bytes] length:[data length]]]; } + (NSString*) sha256HashFromString:(NSString*)string { unsigned char hashedChars[CC_SHA512_DIGEST_LENGTH]; CC_SHA512([string UTF8String], [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding], hashedChars); NSData * hashedData = [NSData dataWithBytes:hashedChars length:CC_SHA512_DIGEST_LENGTH]; NSData* tmp = [[NSData alloc] initWithData:hashedData]; NSString* ret = [tmp stringWithHexBytes]; [tmp release]; return ret; } @end