无法将withUnsafeBytes转换为SHA-256不推荐使用的代码

问题描述 投票:1回答:1

我不赞成使用withUnsafeBytes上的Data方法。我设法使其与使用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一起使用时,它正在工作。

之前关于不赞成使用数据的withUnsafeBytes方法,我遇到了问题。我设法使其与使用SHA-512的更新方法一起使用。我最近再次遇到了相同的问题,并且...

swift deprecated sha256
1个回答
0
投票

您现在可以使用更新的CryptoKit

© www.soinside.com 2019 - 2024. All rights reserved.