簡體   English   中英

xcode ios HMAC SHA 256哈希

[英]xcode ios HMAC SHA 256 hashing

所以我想弄清楚如何在ios上做一個hmacshad256哈希,因為這是我為我所做的wcf服務api做的哈希。 我一直在嘗試尋找有關它的一些信息,但通常最終會得到一個SHA-256哈希。

這是我唯一的參考:

需要像Java一樣在Objective C中生成HMAC SHA256哈希

而且我不確定這是否是唯一的方法(導入java hmac類)

任何幫助表示贊賞。

謝謝!

NSString * parameters = @"string to hash"
NSString *salt = @"saltStringHere";
NSData *saltData = [salt dataUsingEncoding:NSUTF8StringEncoding];
NSData *paramData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData* hash = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH ];
CCHmac(kCCHmacAlgSHA256, saltData.bytes, saltData.length, paramData.bytes, paramData.length, hash.mutableBytes);
NSString *base64Hash = [hash base64Encoding];

並且

#import <CommonCrypto/CommonHMAC.h>

由於從iOS 7.0 棄用base64Encoding ,最后一行應該是:

NSString *base64Hash = [hash base64EncodedStringWithOptions:0];

這是我提交的解決方案,我從其他答案中匯總了這個問題:

通過更改CC_SHA256_DIGEST_LENGTH和kCCHmacAlgSHA256,可以輕松地將其調整為其他哈希類型。

如果您對此感興趣,請查看CommonCrypto庫中的CommonDigest.h文件。

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCrypto.h>

+ (NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key
{
    const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
    const char *cData = [plaintext cStringUsingEncoding:NSASCIIStringEncoding];
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];
    const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
    NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];
    for (int i = 0; i < HMACData.length; ++i){
        [HMAC appendFormat:@"%02x", buffer[i]];
    }

    return HMAC;
}

這已經在iOS 8.x和iOS 7.x上進行了測試

 + (NSString *)hmacSHA256EncryptString{ NSString * parameterSecret = @"input secret key"; NSString *plainString = @"input encrypt content string"; const char *secretKey = [parameterSecret cStringUsingEncoding:NSUTF8StringEncoding]; const char *plainData = [plainString cStringUsingEncoding:NSUTF8StringEncoding]; unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, secretKey, strlen(secretKey), plainData, strlen(plainData), cHMAC); NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)]; const unsigned char *bufferChar = (const unsigned char *)[HMACData bytes]; NSMutableString *hmacString = [NSMutableString stringWithCapacity:HMACData.length * 2]; for (int i = 0; i < HMACData.length; ++i){ [hmacString appendFormat:@"%02x", bufferChar[i]]; } return hmacString; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM