我正在尝试使用引用此链接 Objective-C sample code for HMAC-SHA1 的 SHA-512 算法从我的 iOS 应用程序中复制 Hmac 生成行为.
为此,我尝试使用 CrytoJS和 jsSHA使用 javascript 代码计算 Hmac 的库。我发现这些 javascript 库生成的 hmac 值与我使用 iOS 代码生成的值存在差异。
有人可以帮助我了解我在这里做错了什么吗?我有一种感觉,我弄乱了传递给这两种方法的键和计数器值的格式。
例如:
key = "敏捷的棕狐跳过懒狗"
计数器 = 123
iOS代码生成的Hmac- 8d4b0f7c7f800ffd656829b98988048b49b08d0068f6fd33add8a02b6bce8097cdd3a69dc8292ec7cc04e15021afb4499afe4a292f8db082b2d253ddfe7d7015
由 javascript 库生成的 Hmac-
211935F67D87CBB6A98DE6A6D9D64F9AAF8DA5F09BF17F1B7E5BD46FCD9BEFBCD3585FB859BD042291AF5D79B6D92CF7B348CD6558A18AEF4328FAF344D63266
iOS 代码:
NSData *key = [key dataUsingEncoding:NSASCIIStringEncoding];
NSData *rawKeyData = [DataUtil rawDataFromHex:key];
//encode the counter
uint8_t tosign[8];
for (int i = sizeof(tosign) - 1; i >= 0; i--) {
tosign[i] = counter & 0xff;
counter >>= 8;
}
unsigned char cHMAC[CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512, [rawKeyData bytes], [rawKeyData length], tosign, sizeof(tosign), cHMAC);
NSData *hmac = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];
return hmac;
javascript代码:
var hash = CryptoJS.HmacSHA512("123", "The quick brown fox jumps over the lazy dog");
Best Answer-推荐答案 strong>
HMAC 接受一个数据键和一个键和数据参数,它们是字节,并返回由指定的哈希函数确定的长度的字节。
例子:
+ (NSData *)doHmacSha512NSData *)dataIn
keyNSData *)key
{
NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];
CCHmac( kCCHmacAlgSHA512,
key.bytes,
key.length,
dataIn.bytes,
dataIn.length,
macOut.mutableBytes);
return macOut;
}
测试:
NSData *keyData = [@"MyTestKey" dataUsingEncoding:NSASCIIStringEncoding];
NSData *data = [@"Now is the time for all good computers to come to the aid of their masters." dataUsingEncoding:NSASCIIStringEncoding];
NSData *hamcData = [Crypto doHmacSha512:data key:keyData]; // Where "Crypto" is the class "doHmacSha512" is defined in.
关于javascript - iOS 和 javascript 库之间的 HMAC SHA-512 生成差异,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/30387437/
|