objective c hmac sha 256给出了错误的nsdata输出

gdu*_*ubs 2 objective-c hmac wcf-security nsdata

所以最后想出了如何进行hmac sha 256散列.我将使用它来制作一个wcf服务api.我的问题是我的方法发出的NSData输出有空格.

例如.这就是我的API发送的样子

"2efb00aba01a3f5b674fba3063b43fee7a9356947118 ......"

这就是我的iPhone应用程序显示它的方式

<2efb00ab a01a3f5b 674fba30 .....>

这就是我在Objective c中的代码的样子:

NSData *hmacSHA256(NSString *key, NSString *data)
{
    const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
    const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
}
Run Code Online (Sandbox Code Playgroud)

这来自这个答案:

/sf/answers/592138641/

无论如何,我的问题是,我该如何处理这个问题.如何将NSdata输出转换为字符串?如果转换为字符串,我猜测输出将与WCF服务API发送的不同.我是否会更改API处理hmacsha256输出的方式?

谢谢!

dre*_*lax 6

您可以稍微修改您的方法,以便创建一个将字节格式化为十六进制的字符串,而不是创建包含摘要字节的NSData.

NSString *hmacSHA256(NSString *key, NSString *data)
{
    const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
    const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

    NSMutableString *result = [NSMutableString string];
    for (int i = 0; i < sizeof cHMAC, i++)
    {
        [result appendFormat:@"%02hhx", cHMAC[i]];
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)