美文网首页
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