2017-06-16 1 views
0

J'ai un code pour générer MD5 chaîne à partir des données de fichier:Test mon MD5 Swift 3 Code

extension Data { 

func hexString() -> String { 
    let string = self.map{ String($0, radix:16) }.joined() 

    // "45769ca7ec1ac00cec11df87df982b7d" 
    return string 
} 

func MD5() -> Data { 
    var result = Data(count: Int(CC_MD5_DIGEST_LENGTH)) 
    _ = result.withUnsafeMutableBytes {resultPtr in 
     self.withUnsafeBytes {(bytes: UnsafePointer<UInt8>) in 
      CC_MD5(bytes, CC_LONG(count), resultPtr) 
     } 
    } 
    return result 
} 
} 

extension String { 
    func hexString() -> String { 
     return self.data(using: .utf8)!.hexString() 
    } 

    func MD5() -> String { 
     return self.data(using: .utf8)!.MD5().hexString() 
    } 
} 

Je ne sais pas si cela fonctionne, car il pourrait juste être la chaîne MD5 que je reçois de Vimeo a tort.

Premièrement, est-ce que ce code Swift 3 semble correct pour générer MD5? Utilisation:

let fileHandle = try? FileHandle(forReadingFrom: getFileUrl(forFileId: id)!) 
let fileData = fileHandle?.availableData 
if let md5 = fileData?.MD5().hexString() { ... } 

Deuxièmement, y at-il un outil Web que je peux utiliser pour télécharger mon fichier et récupérer sa chaîne MD5?

MISE À JOUR: J'ai testé mon dossier dans l'outil MD5 en ligne et je reçois le hachage suivant: F0750875A790471702E9D2D34433729A Mais mon code produit ceci: f075875a79047172e9d2d34433729a

Il semble si proche! Ça doit être quelque chose dans mon extension. Existe-t-il une meilleure solution MD5 dans Swift 3?

+0

J'ai trouvé un outil web: http://onlinemd5.com –

Répondre

0

Ok. J'ai trouvé une bonne solution:

extension Data { 

var md5String:String { 

    var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) 

    var digestHex = "" 
    self.withUnsafeBytes { (bytes: UnsafePointer<CChar>) -> Void in 

     CC_MD5(bytes, CC_LONG(self.count), &digest) 
     for index in 0..<Int(CC_MD5_DIGEST_LENGTH) { 
      digestHex += String(format: "%02x", digest[index]) 
     } 
    } 
    return digestHex 
    } 

} 

Ceci est une variable calculée sur une extension de données. J'ai testé cela et il produit des chaînes de hachage MD5 correctes. Vous pouvez également l'utiliser sur une extension String comme ceci:

extension String { 

func MD5() -> String { 
    return self.data(using: .utf8)!.md5String 
} 
}