Hash string with SHA512 in Swift

后端 未结 3 1734
天涯浪人
天涯浪人 2021-02-03 11:20

Anyone knows how to reproduce PHP hashing method hash(‘SHA512’, $value, true) in swift ? I tried to use CommonCrypto C library with this code :

extension String          


        
3条回答
  •  感动是毒
    2021-02-03 11:52

    Updating this with swift 4

    func sha512Hex( string: String) -> String {
        var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))
        if let data = string.data(using: String.Encoding.utf8) {
            let value =  data as NSData
            CC_SHA512(value.bytes, CC_LONG(data.count), &digest)
    
        }
        var digestHex = ""
        for index in 0.. [UInt8] {
        var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))
        let data = string.data(using: String.Encoding.utf8 , allowLossyConversion: true)
        let value =  data! as NSData
        CC_SHA512(value.bytes, CC_LONG(value.length), &digest)
    
        return digest
    }
    
    func sha512Base64(string: String) -> String {
        let digest = NSMutableData(length: Int(CC_SHA512_DIGEST_LENGTH))!
        if let data = string.data(using: String.Encoding.utf8) {
    
            let value =  data as NSData
            let uint8Pointer = UnsafeMutablePointer.allocate(capacity: digest.length)
            CC_SHA512(value.bytes, CC_LONG(data.count), uint8Pointer)
    
        }
        return digest.base64EncodedString(options: NSData.Base64EncodingOptions([]))
    }
    

    Testing

        let vad = sha512Hex(string: "8yOrBmkd")
        print(vad)
    
        let digestRaw = sha512(string:"8yOrBmkd")
        print("decimal array:\n\(digestRaw)")
        print("hexadecimal:\n\(NSData(bytes:digestRaw, length:digestRaw.count).description)")
    
        let digestBase64 = sha512Base64(string:"8yOrBmkd")
        print("Base64:\n\(digestBase64)")
    

提交回复
热议问题