Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I compute a SHA-2 (ideally SHA 256 or SHA 512) hash in iOS?

The Security services API doesn't appear to allow me to compute a hash directly. There are plenty of public domain and liberally licensed versions available, but I'd rather use a system library implementation if possible.

The data is accessible via NSData, or plain pointers.

The cryptographic strength of the hash is important to me. SHA-256 is the minimum acceptable hash size.

like image 601
James Avatar asked Jun 03 '11 14:06

James


People also ask

How is SHA-256 hash calculated?

For SHA-256 these are calculated from the first 8 primes. These always remain the same for any message. The primes are firstly square rooted and then taken to the modulus 1. The result is then multiplied by 16⁸ and rounded down to the nearest integer.

Is SHA-2 and Sha-256 the same?

If you see “SHA-2,” “SHA-256” or “SHA-256 bit,” those names are referring to the same thing. If you see “SHA-224,” “SHA-384,” or “SHA-512,” those are referring to the alternate bit-lengths of SHA-2.

What are the possible hash sizes in SHA-2?

SHA-2 is often called the SHA-2 family of hashes because it contains many different-size hashes, including 224-, 256-, 384-, and 512-bit digests. When someone says they are using the SHA-2 hash, you don't know which bit length they are using, but the most popular one is 256 bits (by a large margin).


1 Answers

This is what I'm using for SHA1:

#import <CommonCrypto/CommonDigest.h>  + (NSData *)sha1:(NSData *)data {     unsigned char hash[CC_SHA1_DIGEST_LENGTH];     if ( CC_SHA1([data bytes], [data length], hash) ) {         NSData *sha1 = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];                 return sha1;     } return nil; } 

Replace CC_SHA1 with CC_SHA256 (or whichever you need), as well as CC_SHA1_DIGEST_LENGTH with CC_SHA256_DIGEST_LENGTH.

like image 159
alex-i Avatar answered Sep 23 '22 15:09

alex-i