MD2 MD4 MD5 SHA1 SHA224 SHA256 SHA384 SHA512(Swift 3)
这些函数将使用八种加密哈希算法之一对 String 或 Data 输入进行散列。
name 参数指定哈希函数名称为字符串
支持的函数是 MD2,MD4,MD5,SHA1,SHA224,SHA256,SHA384 和 SHA512
此示例需要 Common Crypto
必须为项目提供桥接头:
#import <CommonCrypto/CommonCrypto.h>
将 Security.framework 添加到项目中。
此函数采用哈希名称和要散列的数据并返回数据:
name: A name of a hash function as a String
data: The Data to be hashed
returns: the hashed result as Data
func hash(name:String, data:Data) -> Data? {
let algos = ["MD2": (CC_MD2, CC_MD2_DIGEST_LENGTH),
"MD4": (CC_MD4, CC_MD4_DIGEST_LENGTH),
"MD5": (CC_MD5, CC_MD5_DIGEST_LENGTH),
"SHA1": (CC_SHA1, CC_SHA1_DIGEST_LENGTH),
"SHA224": (CC_SHA224, CC_SHA224_DIGEST_LENGTH),
"SHA256": (CC_SHA256, CC_SHA256_DIGEST_LENGTH),
"SHA384": (CC_SHA384, CC_SHA384_DIGEST_LENGTH),
"SHA512": (CC_SHA512, CC_SHA512_DIGEST_LENGTH)]
guard let (hashAlgorithm, length) = algos[name] else { return nil }
var hashData = Data(count: `Int(length)`)
_ = hashData.withUnsafeMutableBytes {digestBytes in
data.withUnsafeBytes {messageBytes in
hashAlgorithm(messageBytes, `CC_LONG(data.count)`, digestBytes)
}
}
return hashData
}
此函数接受哈希名称和要哈希的 String 并返回一个数据:
name: A name of a hash function as a String
string: The String to be hashed
returns: the hashed result as Data
func hash(name:String, string:String) -> Data? {
let data = string.data(using:.utf8)!
return hash(name:name, data:data)
}
例子:
let clearString = "clearData0123456"
let clearData = clearString.data(using:.utf8)!
print("clearString: `(clearString)`")
print("clearData: \(clearData as NSData)")
let hashSHA256 = hash(name:"SHA256", string:clearString)
print("hashSHA256: \(hashSHA256! as NSData)")
let hashMD5 = hash(name:"MD5", data:clearData)
print("hashMD5: \(hashMD5! as NSData)")
输出:
clearString: clearData0123456
clearData: <636c6561 72446174 61303132 33343536>
hashSHA256: <aabc766b 6b357564 e41f4f91 2d494bcc bfa16924 b574abbd ba9e3e9d a0c8920a>
hashMD5: <4df665f7 b94aea69 695b0e7b baf9e9d6>