MD5 eines Strings erstellen und als Id nutzen

Da Swift standardmäßig keine MD5-Funktion anbietet, muss man sich mit einem kleinen Trick in Form einer Extension weiterhelfen:

// Create a MD5 out of a String
extension String  {
    var md5: String! {
        let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
        let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
        CC_MD5(str!, strLen, result)
        let hash = NSMutableString()
        for i in 0..<digestLen {
            hash.appendFormat("%02x", result[i])
        }
        result.destroy()
        return String(format: hash as String)
    }
}

Wichtig:
Damit auf Typen wie CC_Long, CC_MD5 etc. zugegriffen werden kann, muss ein Bridging-Header erstellt werden, in dem folgende Codezeile stehen muss:
#import <CommonCrypto/CommonCrypto.h>

Der MD5-Hash kann z.B. verwendet werden, um für die entsprechenden Strings Ids zu vergeben (Objekte, Dictionaries, Arrays, …). Dies bietet sich an, da normale Objekt-Ids auch Slashes enthalten können, was bei Abfragen zu Problemen führen kann.
Aber aufgepasst: Die folgenden beiden Schreibweisen (für die selbe Objekt-Id!) ergeben unterschiedliche MD5-Strings:
let md5_1 = objectID.description.md5
let md5_2 = „\(objectID.description)“.md5

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.