aquí es cómo se puede generar HMAC-SHA1 base 64.
Debe agregar Base64.hy Base64.m a su proyecto. Puede obtenerlo llamando al here.
Si usa ARC, se mostrarán algunos errores en Base64.m. Encuentra las líneas que son similares como esta
return [[[self alloc] initWithBase64String:base64String] autorelease];
lo que necesitas es eliminar la sección de liberación automática. El resultado final debería verse así:
return [[self alloc] initWithBase64String:base64String];
Ahora en su proyecto general de importación "Base64.h" y el siguiente código
#import "Base64.h"
#include <CommonCrypto/CommonDigest.h>
#include <CommonCrypto/CommonHMAC.h>
- (NSString *)hmacsha1:(NSString *)data secret:(NSString *)key {
const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64String];
return hash;
}
Con
NSLog(@"Hash: %@", hash);
obtendrá algo similar a esto:
ghVEjPvxwLN1lBi0Jh46VpIchOc=
yo no entiendo por qué está utilizando º e base64Encoding, si todo lo que queremos es tener una cadena del hash generado. ¿Puedes explicarlo? Porque al final obtenemos un hmac-sha256 codificado en base64, en lugar de un hmac-sha256 ... – bruno
@bruno en caso de que no lo hayas notado, tu respuesta ha sido eliminada y convertida en un comentario. Si tiene más para publicar, publíquelo como una nueva respuesta. –