generate - xcode ios HMAC SHA 256 hashing
hmac java (3)
Aquí está la solución que estoy presentando y que junto con otras respuestas al respecto:
Esto se adapta fácilmente a otros tipos de hash cambiando CC_SHA256_DIGEST_LENGTH y kCCHmacAlgSHA256.
Si está interesado en hacer eso, revise el archivo CommonDigest.h dentro de la biblioteca CommonCrypto.
#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;
}
Esto ha sido probado en iOS 8.x y iOS 7.x
Así que estoy tratando de averiguar cómo hacer un hash hmacshad256 en ios, ya que es el hash que hice para la API de servicio wcf que hice. He estado tratando de buscar alguna información al respecto, pero por lo general terminaría obteniendo un hash SHA-256.
Esta es la única referencia que tengo:
Necesidad de generar hash HMAC SHA256 en Objective C como en Java
Y no estoy seguro de si esa es la única manera de hacerlo (importando una clase jmac hmac)
Cualquier ayuda es apreciada.
¡Gracias!
+ (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;
}
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];
y también
#import <CommonCrypto/CommonHMAC.h>
Dado que base64Encoding
está en desuso desde iOS 7.0, la última línea debe ser:
NSString *base64Hash = [hash base64EncodedStringWithOptions:0];