【问题标题】:Progressive HMAC SHA256 in Objective-CObjective-C 中的渐进式 HMAC SHA256
【发布时间】:2015-06-23 21:32:10
【问题描述】:

我需要使用 HMAC SHA256 生成哈希。我在 JavaScript 中使用以下代码。我需要 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());

如何在 Objective-C 中实现这一点?

【问题讨论】:

  • 使用 Apple Common Crypto,它是安全框架的一部分..

标签: javascript objective-c cryptography hmac cryptojs


【解决方案1】:

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 = [@"string" dataUsingEncoding:NSUTF8StringEncoding];
    NSString *string = [data base64EncodedStringWithOptions:0];

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2020-10-18
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2017-01-14
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多