美文网首页iOS点点滴滴iOS随记
MD5加密以及HmacSHA265加密

MD5加密以及HmacSHA265加密

作者: 脚踏实地的小C | 来源:发表于2017-10-17 11:46 被阅读11次

      今天和后台的一起调试一个接口,MD5是我之前用过的,也是大家经常使用的。但是HmacSHA265是我第一次使用,一开始一脸懵逼,后面查了很多资料,终于找到了可靠的材料!!!!
      好了不说废话了,直接上代码,一起复习下吧!!!!

    MD5

    LCMD5Tool.h文件:

    #import <Foundation/Foundation.h>
    
    @interface LCMD5Tool : NSObject
    
    /**
     *  MD5加密, 32位 小写
     *
     *  @param str 传入要加密的字符串
     *
     *  @return 返回加密后的字符串
     */
    +(NSString *)MD5ForLower32Bate:(NSString *)str;
    
    /**
     *  MD5加密, 32位 大写
     *
     *  @param str 传入要加密的字符串
     *
     *  @return 返回加密后的字符串
     */
    +(NSString *)MD5ForUpper32Bate:(NSString *)str;
    
    /**
     *  MD5加密, 16位 小写
     *
     *  @param str 传入要加密的字符串
     *
     *  @return 返回加密后的字符串
     */
    +(NSString *)MD5ForLower16Bate:(NSString *)str;
    
    /**
     *  MD5加密, 16位 大写
     *
     *  @param str 传入要加密的字符串
     *
     *  @return 返回加密后的字符串
     */
    +(NSString *)MD5ForUpper16Bate:(NSString *)str;
    
    @end
    

    LCMD5Tool.m文件:

    #import "LCMD5Tool.h"
    #import <CommonCrypto/CommonCrypto.h>
    
    @implementation LCMD5Tool
    
    #pragma mark - 32位 小写
    +(NSString *)MD5ForLower32Bate:(NSString *)str{
        
        //要进行UTF8的转码
        const char* input = [str UTF8String];
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(input, (CC_LONG)strlen(input), result);
        
        NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            [digest appendFormat:@"%02x", result[i]];
        }
        
        return digest;
    }
    
    #pragma mark - 32位 大写
    +(NSString *)MD5ForUpper32Bate:(NSString *)str{
        
        //要进行UTF8的转码
        const char* input = [str UTF8String];
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(input, (CC_LONG)strlen(input), result);
        
        NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            [digest appendFormat:@"%02X", result[i]];
        }
    
        return digest;
    }
    
    #pragma mark - 16位 大写
    +(NSString *)MD5ForUpper16Bate:(NSString *)str{
        
        NSString *md5Str = [self MD5ForUpper32Bate:str];
        
        NSString  *string;
        for (int i=0; i<24; i++) {
            string=[md5Str substringWithRange:NSMakeRange(8, 16)];
        }
        return string;
    }
    
    
    #pragma mark - 16位 小写
    +(NSString *)MD5ForLower16Bate:(NSString *)str{
        
        NSString *md5Str = [self MD5ForLower32Bate:str];
        
        NSString  *string;
        for (int i=0; i<24; i++) {
            string=[md5Str substringWithRange:NSMakeRange(8, 16)];
        }
        return string;
    }
    @end
    

    HmacSHA265

    /**
    *  加密方式,MAC算法: HmacSHA256
    *
    *  @param plaintext 要加密的文本
    *  @param key       秘钥
    *
    *  @return 加密后的字符串
    */
    - (NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key
    {
        const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
        const char *cData = [plaintext cStringUsingEncoding:NSASCIIStringEncoding];
        unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
        CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
        NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];
        const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
        NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];
        for (int i = 0; i < HMACData.length; ++i){
            [HMAC appendFormat:@"%02x", buffer[i]];
        }
        return HMAC;
    }
    

    参考文献:
    iOS开发 关于MD5加密的相关使用
    iOS HmacSHA256加密算法

    相关文章

      网友评论

        本文标题:MD5加密以及HmacSHA265加密

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