Sha256 in Objective-C for iPhone
Try this, it worked for me
1) To get a hash for plain text input
-(NSString*)sha256HashFor:(NSString*)input{ const char* str = [input UTF8String]; unsigned char result[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(str, strlen(str), result); NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2]; for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++) { [ret appendFormat:@"%02x",result[i]]; } return ret;}
2) To get hash for NSData
as input
Note:- I have used NSData
category, so the code is as follow
- (NSString *)SHA256_HASH { //if (!self) return nil; unsigned char hash[CC_SHA256_DIGEST_LENGTH]; if ( CC_SHA256([(NSData*)self bytes], [(NSData*)self length], hash) ) { NSData *sha2 = [NSData dataWithBytes:hash length:CC_SHA256_DIGEST_LENGTH]; // description converts to hex but puts <> around it and spaces every 4 bytes NSString *hash = [sha2 description]; hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""]; hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""]; hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""]; // hash is now a string with just the 40char hash value in it //NSLog(@"hash = %@",hash); // Format SHA256 fingerprint like // 00:00:00:00:00:00:00:00:00 int keyLength=[hash length]; NSString *formattedKey = @""; for (int i=0; i<keyLength; i+=2) { NSString *substr=[hash substringWithRange:NSMakeRange(i, 2)]; if (i!=keyLength-2) substr=[substr stringByAppendingString:@":"]; formattedKey = [formattedKey stringByAppendingString:substr]; } return formattedKey; } return nil;}
It's important to know that you need to import:
#import <CommonCrypto/CommonDigest.h>
Hope this help!
You probably should use NSData
instead of NSString
then. Where do you get that string from?