2017-06-07 3 views
0

Ich bin Codierung eine App mit Xcode und swift 3.1Minimal Art und Weise HMAC SHA512 in swift 3.1

Ich brauche zu bekommen hmac sha512 Hash für meinen API-Aufruf an den Server zu erstellen.

I konw gibt es verschiedene Frameworks wie CryptoSwift, die uns mit solchen Features zur Verfügung stellen.

Ich bin jedoch interessiert zu wissen, ob es in nativen xcode/swift 3.1 ohne die Verwendung von Bibliotheken oder Frameworks möglich ist.

Wenn nicht, warum nicht?

Auch, wenn ich die Bibliothek verwenden muss, ist die minimale Methode, hmac sha512 basierten Bibliothekscode nur zu erhalten?

Danke.

+3

Sicher ist es möglich. Es ist nur Mathe. Schlage den Algorithmus nach und schreibe ihn. :) –

+0

Oder ziehen Sie es aus CryptoSwift, die SHA-512 in Swift enthält ohne ein Framework darunter. https://github.com/krzyzanowskim/CryptoSwift/blob/master/Sources/CryptoSwift/SHA2.swift –

Antwort

2

Sie sollten auf jeden Fall CommonCrypto verwenden, da es bereits auf jedem Gerät verfügbar ist, gut getestet und schnell. Sie müssen nur einen Überbrückungs Header

#import <CommonCrypto/CommonCrypto.h> 

Sie here nachschlagen können enthalten hinzufügen, wie der Brückenkopf hinzuzufügen.

Sie dann Ihre HMAC mit einer einfachen Erweiterung (Swift 4) berechnen:

extension String { 

    func hmac(key: String) -> String { 
     var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) 
     CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), key, key.count, self, self.count, &digest) 
     let data = Data(bytes: digest) 
     return data.map { String(format: "%02hhx", $0) }.joined() 
    } 

} 

Beispiel:

let result = "test".hmac(key: "test") 

Ergebnis:

88cd2108b5347d973cf39cdf9053d7dd42704876d8c9a9bd8e2d168259d3ddf7