如何使用swift 3在iOS上散列文件?
|
我有许多文件将存在于服务器上.用户可以在设备上创建这些类型的文件(plist),然后将其上传到所述服务器(CloudKit).我想通过内容使它们独一无二(唯一的方法应该适应创建日期的变化).我的理解是我应该散列这些文件以获取它们的唯一文件名.我的问题是:
>我的理解是正确的,我想要的是哈希函数吗? 非常感谢!
创建每个文件的加密哈希值,您可以将其用于唯一性比较. SHA-256是一个当前的哈希函数,在iOS上使用Common Crypto非常快,在iPhone 6S上SHA256将处理大约1GB /秒减去I / O时间.如果您需要更少的字节,只需截断哈希.
使用Common Crypto(Swift3)的示例 对于散列字符串: func sha256(string: String) -> Data {
let messageData = string.data(using:String.Encoding.utf8)!
var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))
_ = digestData.withUnsafeMutableBytes {digestBytes in
messageData.withUnsafeBytes {messageBytes in
CC_SHA256(messageBytes,CC_LONG(messageData.count),digestBytes)
}
}
return digestData
}
let testString = "testString"
let testHash = sha256(string:testString)
print("testHash: (testHash.map { String(format: "%02hhx",$0) }.joined())")
let testHashBase64 = testHash.base64EncodedString()
print("testHashBase64: (testHashBase64)")
注意:添加到您的桥接标题: #import <CommonCrypto/CommonCrypto.h> 对于散列数据: func sha256(data: Data) -> Data {
var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))
_ = digestData.withUnsafeMutableBytes {digestBytes in
data.withUnsafeBytes {messageBytes in
CC_SHA256(messageBytes,CC_LONG(data.count),digestBytes)
}
}
return digestData
}
let testData: Data = "testString".data(using: .utf8)!
print("testData: (testData.map { String(format: "%02hhx",$0) }.joined())")
let testHash = sha256(data:testData)
print("testHash: (testHash.map { String(format: "%02hhx",$0) }.joined())")
另见Martin的链接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
