iOS 摘要的生成

16 篇文章 0 订阅
11 篇文章 0 订阅

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

如下代码都是在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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值