HMAC SHA-512生成iOS和JavaScript库之间的差异 [英] HMAC SHA-512 generation discrepancies between iOS and javascript libraries
问题描述
我正在尝试使用SHA-512算法从我的iOS应用程序复制Hmac生成行为,参考此链接 HMAC-SHA1的Objective-C示例代码。
为此,我尝试使用 CrytoJS 和 jsSHA 库使用javascript代码计算Hmac。我发现这些javascript库生成的hmac值与我使用iOS代码的hmac值存在差异。
有人可以帮我理解我在这里做错了什么吗?我有一种感觉,我正在弄乱传递给这两种方法的键和计数器值的格式。
例如:
key =通过iOS的生成的 快速褐色fox跳通过惰性狗
计数器= 123
HMAC代码 - 8d4b0f7c7f800ffd656829b98988048b49b08d0068f6fd33add8a02b6bce8097cdd3a69dc8292ec7cc04e15021afb4499afe4a292f8db082b2d253ddfe7d7015
$ b
<$ p $:$ b。通过JavaScript的libraries-
211935F67D87CBB6A98DE6A6D9D64F9AAF8DA5F09BF17F1B7E5BD46FCD9BEFBCD3585FB859BD042291AF5D79B6D92CF7B348CD6558A18AEF4328FAF344D63266
的iOS代码生成
HMAC p> NSData * key = [key dataUsingEncoding:NSASCIIStringEncoding];
NSData * rawKeyData = [DataUtil rawDataFromHex:key];
//对计数器进行编码
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)];
返回hmac;
javascript代码:
var hash = CryptoJS.HmacSHA512(123,快速的棕色狐狸跳过懒狗);
HMAC获取数据密钥以及密钥和数据参数这是字节并返回由指定的散列函数确定的长度的字节。
示例:
+(NSData *)doHmacSha512:(NSData *)dataIn
key:(NSData *)key
{
NSMutableData * macOut = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512,
key.bytes,
key.length,
dataIn.bytes,
dataIn.length,
macOut。 mutableBytes);
返回macOut;
}
测试:
NSData * keyData = [@MyTestKeydataUsingEncoding:NSASCIIStringEncoding];
NSData * data = [@现在是所有优秀计算机来帮助他们的主人的时候了。 dataUsingEncoding:NSASCIIStringEncoding];
NSData * hamcData = [Crypto doHmacSha512:data key:keyData]; //其中加密类是doHmacSha512的定义。
I am trying to replicate the Hmac generation behavior from my iOS app using SHA-512 algorithm referring to this link Objective-C sample code for HMAC-SHA1.
For this purpose, I have tried using CrytoJS and jsSHA libraries to compute the Hmac using javascript code. I have found discrepancies in hmac values generated by these javascript libraries and the one that I have using my iOS code.
Can someone help me understand what could I be doing wrong here? I have a feeling that I am messing up with the format of key and counter values that are being passed to both the methods.
For example: key = "The quick brown fox jumps over the lazy dog" counter = 123
Hmac generated by iOS code- 8d4b0f7c7f800ffd656829b98988048b49b08d0068f6fd33add8a02b6bce8097cdd3a69dc8292ec7cc04e15021afb4499afe4a292f8db082b2d253ddfe7d7015
Hmac generated by javascript libraries- 211935F67D87CBB6A98DE6A6D9D64F9AAF8DA5F09BF17F1B7E5BD46FCD9BEFBCD3585FB859BD042291AF5D79B6D92CF7B348CD6558A18AEF4328FAF344D63266
iOS Code:
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 Code:
var hash = CryptoJS.HmacSHA512("123", "The quick brown fox jumps over the lazy dog");
HMAC takes a data key and a key and data parameters which are bytes and returns bytes of a length determined by the hash function specified.
Example:
+ (NSData *)doHmacSha512:(NSData *)dataIn
key:(NSData *)key
{
NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];
CCHmac( kCCHmacAlgSHA512,
key.bytes,
key.length,
dataIn.bytes,
dataIn.length,
macOut.mutableBytes);
return macOut;
}
Test:
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.
这篇关于HMAC SHA-512生成iOS和JavaScript库之间的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!