gpt4 book ai didi

swift - 快速SHA256

转载 作者:行者123 更新时间:2023-11-30 13:53:46 25 4
gpt4 key购买 nike

我想在项目中使用sha256,但是在将objC代码重写为快速代码时遇到了一些麻烦。请帮帮我。我用这个答案:How can I compute a SHA-2 (ideally SHA 256 or SHA 512) hash in iOS?

这是我的代码

var hash : [CUnsignedChar]
CC_SHA256(data.bytes, data.length, hash)
var res : NSData = NSData.dataWithBytes(hash, length: CC_SHA256_DIGEST_LENGTH)


它给了我所有错误,因为例如swift无法将 Int转换为 CC_LONG

最佳答案

您必须在IntCC_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
}


Swift 3和4的更新:

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)
}


Swift 5更新:

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)
}

关于swift - 快速SHA256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com