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)
这来自这个答案:
无论如何,我的问题是,我该如何处理这个问题.如何将NSdata输出转换为字符串?如果转换为字符串,我猜测输出将与WCF服务API发送的不同.我是否会更改API处理hmacsha256输出的方式?
谢谢!
您可以稍微修改您的方法,以便创建一个将字节格式化为十六进制的字符串,而不是创建包含摘要字节的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)