Créer un hachage à l'aide de la touche et du message

Je veux créer un hash hmac SHA1 d'une string en utilisant une key dans swift. En obj-c je l'ai utilisé et ça a bien fonctionné:

+(NSSsortingng *)sha1FromMessage:(NSSsortingng *)message{ const char *cKey = [API_KEY cSsortingngUsingEncoding:NSASCIISsortingngEncoding]; const char *cData = [message cSsortingngUsingEncoding:NSUTF8SsortingngEncoding]; NSLog(@"%s", cData); unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)]; const unsigned char *buffer = (const unsigned char *)[HMACData bytes]; NSMutableSsortingng *HMAC = [NSMutableSsortingng ssortingngWithCapacity:HMACData.length * 2]; for (int i = 0; i < HMACData.length; ++i){ [HMAC appendFormat:@"%02hhx", buffer[i]]; } return HMAC; } 

Cependant, maintenant j'ai du mal à traduire cela en rapide. C'est ce que j'ai jusqu'ici:

 static func sha1FromMessage(message: Ssortingng){ let cKey = RestUtils.apiKey.cSsortingngUsingEncoding(NSASCIISsortingngEncoding)! let cData = message.cSsortingngUsingEncoding(NSUTF8SsortingngEncoding)! let cHMAC = [CUnsignedChar](count: Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0) CCHmac(kCCHmacAlgSHA1, cKey, cKey.count, cData, cData.count, cHMAC) ... } 

et cette ligne

 CCHmac(kCCHmacAlgSHA1, cKey, cKey.count, cData, cData.count, cHMAC) 

me donne déjà une erreur Int n'est pas convertible en CCHmacAlgorithm . Des idées pour traduire le code obj-c en rapide?

Le dernier paramètre de la fonction CCHmac() a le type UnsafeMutablePointer<Void> parce que c'est là que le résultat est écrit . Vous devez déclarer cHMAC comme variable et le passer comme expression in-out avec & . En outre, certaines conversions de type sont nécessaires:

 var cHMAC = [CUnsignedChar](count: Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0) CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), cKey, UInt(cKey.count), cData, UInt(cData.count), &cHMAC) 

Les valeurs Apple enum sont définies différemment dans Swift. Au lieu de kCCHmacAlgSHA1 , il est probablement défini comme CCHmacAlgorithm.SHA1 .

Ceci est répondu ici: https://stackoverflow.com/a/24411522/2708650