进展HMAC SHA256在Objective-C [英] Progressive HMAC SHA256 in Objective-C
问题描述
我需要使用HMAC SHA256生成一个散列。我在JavaScript中使用以下代码。我需要一个在Objective-C中的等效代码。
function serialize(obj){
return Object.keys ).reduce(function(a,k){a.push(k +'='+ encodeURIComponent(obj [k])); return a},[])。join('&')
}
var query = {
Action:'MyAction',
SignatureMethod:'HmacSHA256',
};
var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256,'MYVALUE');
var queryString = ['POST','m.service.it','/ api / v2',serialize(sorted)]。join('\\\
');
hmac.update(queryString);
query.Signature = CryptoJS.enc.Base64.stringify(hmac.finalize());如何在Objective-C中实现这一点?
< h2_lin>解决方案 HMAC-SHA256示例代码:
+(NSData *)hmacSha256 NSData *)dataIn
key:(NSData *)key
{
NSMutableData * macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256,
key.bytes,
key.length,
dataIn.bytes,
dataIn.length,
macOut.mutableBytes);
return macOut;
}
注意:
- 将
Security.framework
添加到项目
-
必须包含常用密码:
#import< CommonCrypto / CommonCrypto.h>
-
转换可以是输入数据的字符串,也可以是输出的Base64数据:
NSData * data = [@stringdataUsingEncoding:NSUTF8StringEncoding];
NSString * string = [data base64EncodedStringWithOptions:0];
I need to generate a hash using HMAC SHA256. I am using the following code in JavaScript. I need an equivalent code in Objective-C.
function serialize( obj ) {
return Object.keys(obj).reduce(function(a,k){a.push(k+'='+encodeURIComponent(obj[k]));return a},[]).join('&')
}
var query = {
Action : 'MyAction',
SignatureMethod : 'HmacSHA256',
};
var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, 'MYVALUE');
var queryString = ['POST', 'm.service.it', '/api/v2', serialize(sorted)].join('\n');
hmac.update(queryString);
query.Signature = CryptoJS.enc.Base64.stringify(hmac.finalize());
How implement this in Objective-C?
解决方案 HMAC-SHA256 sample code:
+ (NSData *)hmacSha256:(NSData *)dataIn
key:(NSData *)key
{
NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
CCHmac( kCCHmacAlgSHA256,
key.bytes,
key.length,
dataIn.bytes,
dataIn.length,
macOut.mutableBytes);
return macOut;
}
Notes:
- Add
Security.framework
to the project
Common Crypto must be included:
#import <CommonCrypto/CommonCrypto.h>
This is data in and out, add any conversions to desired representations before and after.
Conversions could be string to data on input and data to Base64 on output:
NSData *data = [@"string" dataUsingEncoding:NSUTF8StringEncoding];
NSString *string = [data base64EncodedStringWithOptions:0];
这篇关于进展HMAC SHA256在Objective-C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!