美文网首页
iOS 加密算法 CommonCrypto/CommonDige

iOS 加密算法 CommonCrypto/CommonDige

作者: Aliv丶Zz | 来源:发表于2020-08-27 17:35 被阅读0次

<CommonCrypto/CommonDigest.h> //常用摘要算法, 例如MD5、SHA1等
<CommonCrypto/CommonHMAC.h> //HMAC相关算法加密

这些摘要算法都是三步就可以获取到摘要后的数据或者字符串。

1 声明一个相应摘要算法长度的无符号字节数组. uint8_t buffer[CC_MD5_DIGEST_LENGTH];
2 通过相应函数,例如CC_MD5(),传入对应参数:需要摘要的字节数组,需要摘要的数据长度以及 传入获取结果的字节数组
3.转换为NSData或者NSString类型数据.

直接上代码

CommonCrypto/CommonDigest.h
#pragma mark - 散列函数

- (NSString *)md5String {
    const char *str = self.UTF8String;
   
    uint8_t buffer[CC_MD5_DIGEST_LENGTH];
    
    CC_MD5(str, (CC_LONG)strlen(str), buffer);
    
    return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];
}



- (NSString *)md5StringWithSalt:(NSString *)saltString {
    
    NSString * totalStr = [self stringByAppendingString:saltString];
   
    const char *str = totalStr.UTF8String;
    uint8_t buffer[CC_MD5_DIGEST_LENGTH];

    CC_MD5(str, (CC_LONG)strlen(str), buffer);
    
    return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];
    
}

- (NSString *)sha1String {
    const char *str = self.UTF8String;
  
    uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
    
    CC_SHA1(str, (CC_LONG)strlen(str), buffer);
    
    return [self stringFromBytes:buffer length:CC_SHA1_DIGEST_LENGTH];
}


- (NSString *)sha256String {
    const char *str = self.UTF8String;
   
    uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
    
    CC_SHA256(str, (CC_LONG)strlen(str), buffer);
    
    return [self stringFromBytes:buffer length:CC_SHA256_DIGEST_LENGTH];
}


- (NSString *)sha512String {
    const char *str = self.UTF8String;
   
    uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
    
    CC_SHA512(str, (CC_LONG)strlen(str), buffer);
    
    return [self stringFromBytes:buffer length:CC_SHA512_DIGEST_LENGTH];
}
CommonCrypto/CommonHMAC.h
#pragma mark - HMAC 散列函数
- (NSString *)hmacMD5StringWithKey:(NSString *)key {
    const char *keyData = key.UTF8String;
    const char *strData = self.UTF8String;
  
    uint8_t buffer[CC_MD5_DIGEST_LENGTH];
    
    CCHmac(kCCHmacAlgMD5, keyData, strlen(keyData), strData, strlen(strData), buffer);
    
    return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];
}

- (NSString *)hmacSHA1StringWithKey:(NSString *)key {
    const char *keyData = key.UTF8String;
    const char *strData = self.UTF8String;
    
    uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
    
    CCHmac(kCCHmacAlgSHA1, keyData, strlen(keyData), strData, strlen(strData), buffer);
    
    return [self stringFromBytes:buffer length:CC_SHA1_DIGEST_LENGTH];
}

- (NSString *)hmacSHA256StringWithKey:(NSString *)key {
    const char *keyData = key.UTF8String;
    const char *strData = self.UTF8String;
   
    uint8_t buffer[CC_SHA256_DIGEST_LENGTH];

    CCHmac(kCCHmacAlgSHA256, keyData, strlen(keyData), strData, strlen(strData), buffer);
    
    return [self stringFromBytes:buffer length:CC_SHA256_DIGEST_LENGTH];
}

- (NSString *)hmacSHA512StringWithKey:(NSString *)key {
    const char *keyData = key.UTF8String;
    const char *strData = self.UTF8String;
    
    uint8_t buffer[CC_SHA512_DIGEST_LENGTH];
    
    CCHmac(kCCHmacAlgSHA512, keyData, strlen(keyData), strData, strlen(strData), buffer);
    
    return [self stringFromBytes:buffer length:CC_SHA512_DIGEST_LENGTH];
}

/**
 *bytes转换为字符串
 */
- (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {
    NSMutableString *strM = [NSMutableString string];
    
    for (int i = 0; i < length; i++) {
        [strM appendFormat:@"%02x", bytes[i]];
    }
    
    return [strM copy];
}

相关文章

网友评论

      本文标题:iOS 加密算法 CommonCrypto/CommonDige

      本文链接:https://www.haomeiwen.com/subject/helofktx.html