iOS 摘要的生成

来源:互联网 发布:华大基因 待遇 算法 编辑:程序博客网 时间:2024/06/05 13:21

有时我们为了项目数据保密,我们会做一些摘要设计,接下来说下苹果自带的一些摘要算法:md5、sha1、sha256等。我们自己编写摘要的实现,这样就可以避免第三方库的导入;

如下代码都是在NSString类的扩展内实现的;

      • 一md5的实现
      • 二sha1实现
      • 三HMAC实现
      • 四辅助函数

一、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;}