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