Objective-C 中的渐进式 HMAC SHA256
Progressive HMAC SHA256 in Objective-C
我需要使用 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 中实施?
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 = [@"string" dataUsingEncoding:NSUTF8StringEncoding];
NSString *string = [data base64EncodedStringWithOptions:0];
我需要使用 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 中实施?
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 = [@"string" dataUsingEncoding:NSUTF8StringEncoding];
NSString *string = [data base64EncodedStringWithOptions:0];