scratch/content/html/en/blog/2010-09-02-base64-and-sha1-on-iPhone.md

74 lines
2.2 KiB
Markdown
Raw Normal View History

2010-09-01 22:29:34 +00:00
-----
isHidden: false
menupriority: 1
kind: article
created_at: 2010-09-02T00:02:17+02:00
title: base64 and sha1 on iPhone
author_name: Yann Esposito
author_uri: yannesposito.com
tags:
- iPhone
- Objective-C
2011-11-16 12:30:46 +00:00
- programming
2010-09-01 22:29:34 +00:00
-----
Lets be straight:
here are two functions to add to your code to have `base64` and `hexadecimal` version of the `sha1` hash of an NSString.
To use it, simply copy the code in your class and use as this:
<code class="objective-c">
2010-09-01 22:29:34 +00:00
#import <CommonCrypto/CommonDigest.h>
...
NSString *b64_hash = [self b64_sha1:@"some NSString to be sha1'ed"];
...
NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"];
</code>
The `base64` algorithm must be programmed by hand on iPhone!
<code class="c" file="iphone_base64_sha1.c">
- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
char *c_baseString=(char *)[baseString UTF8String];
CC_SHA1(c_baseString, strlen(c_baseString), result);
return result;
}
- (NSString *)base64:(unsigned char *)result {
NSString *password=[[NSString alloc] init];
static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
password=[password stringByAppendingFormat:@"%c%c%c%c",
cb64[(result[i] &0xFC)>>2],
cb64[((result[i] & 0x03) << 4)
| ((result[i + 1] & 0xF0) >> 4)],
cb64[((result[i + 1] & 0x0F) << 2)
| ((result[i + 2] & 0xC0) >> 6)],
cb64[result[i+2]&0x3F]
];
}
return password;
}
- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
NSString *password=[[NSString alloc] init];
for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
password=[password stringByAppendingFormat:@"%02x", result[i]];
}
return password;
}
- (NSString *)b64_sha1:(NSString *)inputString {
unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
[self sha1:inputString result:result];
return [self base64:result];
}
- (NSString *)hex_sha1:(NSString *)inputString {
unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
[self sha1:inputString result:result];
return [self hexadecimalRepresentation:result];
}
</code>