.h file:
#import
@interface NSData (NSData_HexAdditions)
- (NSString*) stringWithHexBytes;
+ (NSString*) sha256HashFromString:(NSString*)string;
+ (NSString*) sha256HashFromData:(NSData*)data;
@end
.m file:
#import "NSData+Util.h"
#import
@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