MD5、SHA1、SHA256など:時々、私たちはプロジェクトデータのプライバシーを持って、我々はそれがAppleの自身のダイジェストアルゴリズムのいくつかを言うようになった、いくつかの設計の概要を行います。これインポートサードパーティのライブラリを避けて、実装の私たち自身の要約を書きます。
次のコードは、拡張のNSStringのクラス内に実装されています。
の、MD5を達成
- (NSString *)md5String {
//方式一
const char *data = self.UTF8String;
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5(data, (uint32_t)strlen(data), digest);
//方式二
CC_MD5_CTX ctx;
CC_MD5_Init(&ctx);
CC_MD5_Update(&ctx, data, (uint32_t)strlen(data));
CC_MD5_Final(digest, &ctx);
return [self stringFrom:digest length:CC_MD5_DIGEST_LENGTH];
}
二、SHA1達成
//通过观察可知,md5和sha1实现方式类似
//(sha系列摘要基本一个模型,以下不再赘述)
- (NSString *)sha1String {
const char *data = self.UTF8String;
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data,(uint32_t)strlen(data), digest);
return [self stringFrom:digest length:CC_SHA1_DIGEST_LENGTH];
}
三、HMACは達成します
//hmac依赖摘要算法类型
//key这里取得定值,做简要说明
- (NSString *)hmacString {
unsigned char digest[CC_MD5_DIGEST_LENGTH];
NSString *key = @"key";
NSString *text = self;
//这里可以选择Hnac采用的摘要算法
CCHmac(kCCHmacAlgMD5, key.UTF8String, [key length], text.UTF8String, [text length], digest);
NSString *s = [self stringFrom:digest length:CC_MD5_DIGEST_LENGTH];
return s;
}
第四に、ヘルパー
//将char数组生成字符串
- (NSString *)stringFrom:(unsigned char *)digest length:(NSInteger)leng {
NSMutableString *string = [NSMutableString string];
for (int i = 0; i < leng; i++) {
[string appendFormat:@"%02x",digest[i]];
}
NSLog(@"final stringFrom:%@",string);
return string;
}