>我的理解是正确的,我想要的是哈希函数吗?
>我应该使用哪种功能(来自CommonCrypto).
>我需要的是摘要?
>我将如何在代码中进行 *** 作? (我假设这应该在NSData实例上进行哈希处理?).我从谷歌搜索的理解是,我需要一个桥接头,但除此之外,使用CommonCrypto困扰我.如果使用第一方API(Apple)有一种更简单的方法,我很满意(我希望尽可能避免使用第三方代码).
非常感谢!
创建每个文件的加密哈希值,您可以将其用于唯一性比较. 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",#import <CommonCrypto/CommonCrypto.h>) }.joined())")let testHashBase64 = testHash.base64EncodedString()print("testHashBase64: \(testHashBase64)")
Output:
testHash: 4acf0b39d9c4766709a3689f553ac01ab550545ffa4544dfc0b2cea82fba02a3
testHashBase64: Ss8LOdnEdmcJo2ifVTrAGrVQVF/6RUTfwLLOqC+6AqM=
注意:添加到您的桥接标题:
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",) }.joined())")let testHash = sha256(data:testData)print("testHash: \(testHash.map { String(format: "%02hhx",) }.joined())")
对于散列数据:
Output:
testData: 74657374537472696e67
testHash: 4acf0b39d9c4766709a3689f553ac01ab550545ffa4544dfc0b2cea82fba02a3
另见Martin的链接.
总结以上是内存溢出为你收集整理的如何使用swift 3在iOS上散列文件?全部内容,希望文章能够帮你解决如何使用swift 3在iOS上散列文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)