iOS 对NSString进行扩展(Extention),使其SHA224/SHA256/SHA384/SHA512

首先要引入头文件
需要 .m文件 引入头文件

#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>

SHA224 代码

- (NSString *)SHA224{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];// 注意这里的编码格式
    NSData *data=[NSData dataWithBytes:cstr length:self.length];
    uint8_t digest[CC_SHA224_DIGEST_LENGTH];
    CC_SHA224(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA224_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_SHA224_DIGEST_LENGTH; i++){
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

调用示例:

NSString *str = @"jljdfajfjdsjfajfjjlsdaj";
NSString *result = [self SHA224:str0];
NSLog(@"\nresult0--%@",result0);

SHA256代码

- (NSString *)SHA256{
    const char *cstr=[self cStringUsingEncoding:NSUTF8StringEncoding];// 注意这里的编码格式
    NSData *data=[NSData dataWithBytes:cstr length:self.length];
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output=[NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++){
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

调用示例:

NSString *str = @"jljdfajfjdsjfajfjjlsdaj";
NSString *result = [self SHA256:str0];
NSLog(@"\nresult0--%@",result0);

SHA384代码

- (NSString*) SHA384{
    const char *cstr=[self cStringUsingEncoding:NSUTF8StringEncoding];// 注意这里的编码格式
    NSData *data=[NSData dataWithBytes:cstr length:self.length];
    uint8_t digest[CC_SHA384_DIGEST_LENGTH];
    CC_SHA384(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA384_DIGEST_LENGTH*2];
    for(int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++){
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

调用示例:

NSString *str = @"jljdfajfjdsjfajfjjlsdaj";
NSString *result = [self SHA384:str0];
NSLog(@"\nresult0--%@",result0);

SHA512代码

- (NSString*)SHA512{
    const char *cstr=[self cStringUsingEncoding:NSUTF8StringEncoding];// 注意这里的编码格式
    NSData *data=[NSData dataWithBytes:cstr length:self.length];
    uint8_t digest[CC_SHA512_DIGEST_LENGTH];
    CC_SHA512(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH*2];
    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++){
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

调用示例:

NSString *str = @"jljdfajfjdsjfajfjjlsdaj";
NSString *result = [self SHA512:str0];
NSLog(@"\nresult0--%@",result0);

附:

SHA256的另外一种实现方式,但是当NSString *str = @"我是字符串"; 调用时,就会报错,所以推荐使用上面↑的实现方式.

- (NSString *)SHA256{
    const char *s = [self cStringUsingEncoding:NSASCIIStringEncoding]; // 注意这里的编码格式
    NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];
    
    uint8_t digest[CC_SHA256_DIGEST_LENGTH] = {0};
    CC_SHA256(keyData.bytes, (CC_LONG)keyData.length, digest);
    NSData *out = [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    NSString *hash = [out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
    return hash;
}

调用示例:

NSString *str = @"jljdfajfjdsjfajfjjlsdaj";
//NSString *str = @"我是字符串";// 调用会报错
NSString *result = [self SHA256:str0];
NSLog(@"\nresult0--%@",result0);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,867评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,805评论 1 32
  • 群里太静,给大家讲几个故事,解解闷: 故事一:一1老头和一老太太一起上公共汽车,就一个座位, 老太太坐下来,老头上...
    黑茶静儿阅读 2,875评论 0 0
  • 我知道王圣保这个人,还是来自于家乡人们的饭后谈资,他是个千古奇人。 人们不断谈论着他,几十年了,都未曾变过。他可以...
    令狐林阅读 3,161评论 4 4
  • 伴随着酷热的夏天来临的,还有一并到来的孩子们最期盼的暑假。暑假孩子们开心,不用上学。家长烦恼,上班没时间照...
    巫山三峡阅读 1,371评论 0 0