美文网首页
ios-hmacsha256+base64格式密钥

ios-hmacsha256+base64格式密钥

作者: 简鱼7819 | 来源:发表于2019-05-06 14:58 被阅读0次

    项目涉及到的算法,现在网上hamcsha256的都有,我要记录的是其中一种特殊情况

    特殊情况:你拿到密钥key值为base64之后的,且该key值无法正常base64解码出来,你需要在hamc算法了解码之后,再调用CCHmac算法。

    下面是通常意义上的算法,这种算法如果secret值能够正常base64解码出来是没有问题,但是一旦遇到不能正常base64解码的,算出结果将和安卓端、后台端不同。

    -(NSString*)hmacSHA256WithSecret:(NSString*)secret content:(NSString*)content{

        NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:secret options:0];

        const char*cKey = [decodedData bytes];

        const char *cData = [content cStringUsingEncoding:NSUTF8StringEncoding];

        unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

        CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData,strlen(cData), cHMAC);

        NSData*HMACData = [NSDatadataWithBytes:cHMAClength:sizeof(cHMAC)];

        //2、对二进制数据进行base64编码,完成后返回字符串

        NSString *sssaa = [HMACData base64EncodedStringWithOptions:0];

        NSLog(@"--->%@",sssaa);

        returnsssaa;

    }

    下面👇是调整后的代码,调整很简单,只是将 strlen(cKey)换成了decodedData.length

    原因在于, strlen(cKey)的值比decodedData.length的值多1。

    -(NSString*)hmacSHA256WithSecret:(NSString*)secret content:(NSString*)content{

        NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:secret options:0];

        const unsigned char*cKey = [decodedData bytes];

        const char *cData = [content cStringUsingEncoding:NSUTF8StringEncoding];

        unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

        CCHmac(kCCHmacAlgSHA256, cKey, decodedData.length, cData,strlen(cData), cHMAC);

        NSData*HMACData = [NSDatadataWithBytes:cHMAClength:sizeof(cHMAC)];

        //2、对二进制数据进行base64编码,完成后返回字符串

        NSString *baseHamcstr = [HMACData base64EncodedStringWithOptions:0];

        NSLog(@"--->%@",baseHamcstr);

        return baseHamcstr;

    }

    记录,分享~~~

    相关文章

      网友评论

          本文标题:ios-hmacsha256+base64格式密钥

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