2017-06-16 19 views
0

私は、ファイルデータからMD5文字列を生成するためにいくつかのコードを持っている:それはちょうど私がから取得していますMD5の文字列である可能性があるのでテスト私のMD5スウィフト3コード

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() 
    } 
} 

私は、これが動作しているかわからないんだけどヴィメオは間違っています。

まず、スウィフト3コードはMD5を生成するためには大丈夫ですか?使用法:

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

第2に、ファイルをアップロードしてMD5文字列を取得するためのWebツールがありますか?

UPDATE:私はオンラインMD5ツールで自分のファイルをテストし、私は次のハッシュを取得:F0750875A790471702E9D2D34433729A をしかし、私のコードは、これが生成します。f075875a79047172e9d2d34433729a

それはとても近いようです!私の内線の中にあるものでなければならない。 Swift 3には優れたMD5ソリューションがありますか?

+0

Webツールが見つかりました:http://onlinemd5.com –

答えて

0

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 
    } 

} 

これはデータ拡張の計算された変数です。私はこれをテストし、正しいMD5ハッシュ文字列を生成します。次のようにString拡張子にも使用できます。

extension String { 

func MD5() -> String { 
    return self.data(using: .utf8)!.md5String 
} 
} 
関連する問題