Sha256 in Objective-C for iPhone Sha256 in Objective-C for iPhone objective-c objective-c

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?