以下是解决方案,我知道它将节省您100%的时间
BridgingHeader
- > 用于将Objective-C代码公开到Swift项目中
CommonCrypto
- > 是使用md5哈希所需的文件
由于Common Crypto是Objective-C文件,因此需要使用BridgingHeader来使用哈希所需的方法
(例如)
extension String {
func md5() -> String! {
let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
let strLen = CUnsignedInt(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
CC_MD5(str!, strLen, result)
var hash = NSMutableString()
for i in 0..<digestLen {
hash.appendFormat("%02x", result[i])
}
result.destroy()
return String(format: hash as String)
}
如何将Common Crypto添加到Swift项目中?
这个链接会一步一步地教你如何做。
我建议使用Bridging Header
*************更新Swift 3****************
extension String {
func toMD5() -> String {
if let messageData = self.data(using:String.Encoding.utf8) {
var digestData = Data(count: Int(CC_MD5_DIGEST_LENGTH))
_ = digestData.withUnsafeMutableBytes {digestBytes in
messageData.withUnsafeBytes {messageBytes in
CC_MD5(messageBytes, CC_LONG((messageData.count)), digestBytes)
}
}
return digestData.hexString()
}
return self
}
}
extension Data {
func hexString() -> String {
let string = self.map{ String($0, radix:16) }.joined()
return string
}
}
如何使用?
将字符串转换为MD5的方法:
let stringConvertedToMD5 = "foo".toMD5()