Mik*_*ike 3 hash xcode md5 swift
我甚至不指望这个问题,但它出现了.我尝试在swift中从字符串中获取md5哈希值.我在SO上搜索它,并假设我需要导入这样的库:
#import <CommonCrypto/CommonCrypto.h>
Run Code Online (Sandbox Code Playgroud)
首先编译器说'#'不行.然后我删除了,编译器说"<"不行.我试图找出并找到建议添加名为"CommonCrypto"的文件夹并创建一个名为"module.map"的文件.我无法理解如何使用此扩展名创建文件.好的,我创建了swift文件并替换了它的扩展名.然后在那里写代码:
module CommonCrypto [system] {
header "/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
Run Code Online (Sandbox Code Playgroud)
然后在建议中将新模块添加到Swift编译器下的导入路径 - 项目设置中的搜索路径$ {SRCROOT}/CommonCrypto).
它再次不合适.
我不相信它很难做到这一点.我想我误解了一些步骤或事情.如果你知道一步一步的答案,请帮助))
您需要添加桥接标头并将#import <CommonCrypto/CommonCrypto.h>语句添加到它.
添加桥接标头的最简单方法是将Objective-C文件添加到项目中,您将需要添加桥接标头,回复是.之后,您可以删除已添加的Objective-C文件.
示例代码:
func md5(#string: String) -> NSData {
var digest = NSMutableData(length: Int(CC_MD5_DIGEST_LENGTH))!
if let data :NSData = string.dataUsingEncoding(NSUTF8StringEncoding) {
CC_MD5(data.bytes, CC_LONG(data.length),
UnsafeMutablePointer<UInt8>(digest.mutableBytes))
}
return digest
}
//Test:
let digest = md5(string:"Here is the test string")
println("digest: \(digest)")
Run Code Online (Sandbox Code Playgroud)
输出:
摘要:8f833933 03a151ea 33bf6e3e bbc28594
这是一个更多的Swift 2.0版本返回一个数组UInt8:
func md5(string string: String) -> [UInt8] {
var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0)
if let data = string.dataUsingEncoding(NSUTF8StringEncoding) {
CC_MD5(data.bytes, CC_LONG(data.length), &digest)
}
return digest
}
Run Code Online (Sandbox Code Playgroud)