【发布时间】:2019-11-14 15:25:35
【问题描述】:
我之前遇到了一个问题,Data 上的 withUnsafeBytes 方法被弃用了。我设法让它与使用 SHA-512 的新方法一起工作。
我最近再次遇到同样的问题,并尝试重新使用与以前相同的解决方案,但将 SHA-512 更改为 SHA-256 但它没有正确将数据解码为字符串
这是我试图查看它是否会起作用时所拥有的:
let rsa2048Asn1Header:[UInt8] = [
0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00
]
func sha256(data: Data) -> String {
var keyWithHeader = data// Data(rsa2048Asn1Header)
keyWithHeader.append(data)
var hash: UnsafeMutablePointer<UInt8>! = nil/// [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
var result = Data(count: Int(CC_SHA256_DIGEST_LENGTH))
_ = result.withUnsafeMutableBytes({ resultBytes in
hash = resultBytes.baseAddress?.assumingMemoryBound(to: UInt8.self)
keyWithHeader.withUnsafeBytes({ stringBytes in
let sBytes = resultBytes.baseAddress?.assumingMemoryBound(to: UInt8.self)
CC_SHA256(sBytes, CC_LONG(keyWithHeader.count), hash)
})
let string = String(cString: hash)
return string.data(using: .utf8)!.base64EncodedString()
}
但是它创建的字符串是完全错误的,和使用不推荐使用的方法不一样:
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
keyWithHeader.withUnsafeBytes {
_ = CC_SHA256($0, CC_LONG(keyWithHeader.count), &hash)
}
我不确定我做错了什么,因为当我将此代码与 SHA-512 一起使用时它正在工作
【问题讨论】:
-
可能有帮助:stackoverflow.com/q/25388747/1187415 中的 Swift 5 更新。
-
接受的答案是给出弃用警告的原因:(
-
这很奇怪:stackoverflow.com/a/25391020/1187415 中的“Swift 5 更新”版本在我的 Xcode 11.2 中编译时没有警告
-
请发布minimal reproducible example 输入数据、实际输出和预期输出。
标签: swift deprecated sha256