NSData+util category

.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

Leave a Reply

You must be logged in to post a comment.