Swift Can';t使用SHA-256将withUnsafeBytes转换为非弃用代码

Swift Can';t使用SHA-256将withUnsafeBytes转换为非弃用代码,swift,deprecated,sha256,Swift,Deprecated,Sha256,我以前遇到过一个问题,Data上的withUnsafeBytes方法被弃用。我设法让它与使用SHA-512的新方法一起工作 我最近再次遇到同样的问题,并尝试重新使用以前的解决方案,但将SHA-512更改为SHA-256,但它没有正确地将数据解码为字符串 以下是我在尝试看它是否有效时所做的: let rsa2048Asn1Header:[UInt8] = [ 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x

我以前遇到过一个问题,
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()
}

我不确定我做错了什么,因为当我将此代码与SHA-512一起使用时,它正在工作。您现在可以使用更新的
加密工具包

import CommonCrypto

func cryptoSHA256(data : Data) -> String {
    let hash = SHA256.hash(data: keyWithHeader)
    return Data(hash).base64EncodedString()
}

希望这有帮助。

可能有帮助:Swift 5在中进行了更新。这方面公认的答案是给出了弃用警告的原因:(这很奇怪:中的“Swift 5更新”版本在我的Xcode 11.2中编译时没有警告。请发布一篇包含输入数据、实际输出和预期输出的文章。此外,在我上面提到的问答中:。
import CommonCrypto

func cryptoSHA256(data : Data) -> String {
    let hash = SHA256.hash(data: keyWithHeader)
    return Data(hash).base64EncodedString()
}