快速SHA256
我想在项目中使用sha256,但是在将objC代码重写为快速代码时遇到了一些麻烦。
这是我的代码
var hash : [CUnsignedChar]CC_SHA256(data.bytes, data.length, hash)
var res : NSData = NSData.dataWithBytes(hash, length: CC_SHA256_DIGEST_LENGTH)
它给我的错误,因为一切都迅速不能转换Int
到CC_LONG
,例如。
回答:
您必须在Int
和之间进行显CC_LONG
式转换,因为Swift不会像(Objective-)C中那样进行隐式转换。
您还必须定义hash
为所需大小的数组。
func sha256(data : NSData) -> NSData { var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
let res = NSData(bytes: hash, length: Int(CC_SHA256_DIGEST_LENGTH))
return res
}
另外,您可以NSMutableData
用来分配所需的缓冲区:
func sha256(data : NSData) -> NSData { let res = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))
CC_SHA256(data.bytes, CC_LONG(data.length), UnsafeMutablePointer(res.mutableBytes))
return res
}
func sha256(data : Data) -> Data { var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA256($0, CC_LONG(data.count), &hash)
}
return Data(bytes: hash)
}
func sha256(data : Data) -> Data { var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash)
}
return Data(hash)
}
以上是 快速SHA256 的全部内容, 来源链接: utcz.com/qa/415054.html