19

それで、私が作成したwcfサービスAPIに対して行ったハッシュであるため、iosでhmacshad256ハッシュを行う方法を理解しようとしています。それに関する情報を探してみましたが、通常は SHA-256 ハッシュを取得するだけです。

これは私が持っている唯一の参照です:

Java のように Objective C で HMAC SHA256 ハッシュを生成する必要がある

そして、それがそれを行う唯一の方法であるかどうかはわかりません(Java hmacクラスをインポートする)

どんな助けでも大歓迎です。

ありがとう!

4

3 に答える 3

8

この問題に関する他の回答からまとめた、私が提出している解決策は次のとおりです。

これは、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 でテスト済みです。

于 2015-06-24T18:23:36.717 に答える