【发布时间】:2017-08-14 21:05:10
【问题描述】:
我正在尝试通过以下方式在目标 C 中生成 hmac SHA256:
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
只要 key 是字符串,它就可以正常工作。问题出在用于生成mac的外部服务器命令是:
openssl dgst -binary -sha256 -mac HMAC -macopt hexkey:$key
考虑到密钥为 hexkey 正在生成 hmac。所以显然生成的hmac是不同的。
我如何告诉目标 C 中的 CCMac 函数将密钥视为十六进制密钥?我已经尝试将字符串键转换为字节数组并将其传递给 CCMAC 但仍然没有工作。
在 android 中,我通过将十六进制数转换为大整数然后对其执行 getBytes 来实现相同的目的,使用它来创建密钥。 希望你们中的一些人能够指导我。
【问题讨论】:
-
如果不是字符串,什么是“hexkey”?
-
它是一个十六进制字符串,例如:3b7fc8987611a158e561a35cba001fd6。
-
对不起,困惑...你想使用Objective-C吗?并且想知道如何获得与 openssl 相同的结果?
标签: ios objective-c xcode sha256 hmac