MD5 der Daten im Swift 3
Ich versuche zu bekommen MD5-hash meiner Daten (Bild heruntergeladen aus dem interweb). Leider habe ich aktualisiert das framework swift 3 und die Methode, die ich verwendet haben nicht funktioniert jetzt.
Habe ich umgewandelt die meisten, aber ich bin nicht in der Lage zu bekommen bytes Daten:
import Foundation
import CommonCrypto
struct MD5 {
static func get(data: Data) -> String {
var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
CC_MD5(data.bytes, CC_LONG(data.count), &digest)
var digestHex = ""
for index in 0..<Int(CC_MD5_DIGEST_LENGTH) {
digestHex += String(format: "%02x", digest[index])
}
return digestHex
}
}
die CommonCrypto ist schon importiert, als ein benutzerdefiniertes Modul. Problem ist, ich bin immer 'bytes' is unavailable: use withUnsafeBytes instead
auf CC_MD5(data.bytes,...
Also die Frage ist wirklich, wie bekomme ich die bytes aus den Daten und wird diese Lösung funktionieren?
- Hier ist mein reines Rasche Umsetzung, dass muss nicht CommonCrypto.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt,
bytes
ist nicht verfügbar, weil es gefährlich ist. Es ist ein raw-pointer in den Speicher als kann verschwinden. Die empfohlene Lösung ist die VerwendungwithUnsafeBytes
die verspricht, dass das Ziel nicht verschwinden, während der Umfang der Zeiger. Aus dem Gedächtnis, es würde in etwa so Aussehen:Der Punkt ist, dass die
bytes
Zeiger nicht entweichen kann, in Bereiche, wodata
ist nicht mehr gültig.Für ein Beispiel mit
CCHmac
, die ist ziemlich ähnlich zuMD5
finden Sie RNCryptor.Für alle, die es interessiert, hier ist ein Beispiel, das Sie aufbauen konnte, um die Unterstützung unterschiedlicher Algorithmen:
Verwendung:
Code-Snippet: