だから私は、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>
以来 base64Encoding
は非推奨です iOS 7.0から、最後の行は次のようになります。
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;
}
これはiOS8.xおよびiOS7.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;
}