进展HMAC SHA256在Objective-C [英] Progressive HMAC SHA256 in Objective-C

查看:336
本文介绍了进展HMAC SHA256在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;
}

注意:


  1. Security.framework 添加到项目

  2. 必须包含常用密码:

    #import< CommonCrypto / CommonCrypto.h>




  3. 转换可以是输入数据的字符串,也可以是输出的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:

  1. Add Security.framework to the project
  2. Common Crypto must be included:
    #import <CommonCrypto/CommonCrypto.h>

  3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆