繁体   English   中英

如何在HMAC中将密钥作为HEX Swift iOS传递

[英]How to pass key in HMAC as HEX Swift iOS

所以我有这段代码要为HMAC-SHA1生成

let key = "foo".toSHA1()
let data = "bar"
var results = [CUnsignedChar](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))

CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), key, key.count, data, data.count, &results)

let hmacData:NSData = NSData(bytes: results, length: (Int(CC_SHA1_DIGEST_LENGTH)))

var bytes = [UInt8](repeating: 0, count: hmacData.length)
hmacData.getBytes(&bytes, length: hmacData.length)

var hexString = ""
for byte in bytes {
    hexString += String(format:"%02hhx", UInt8(byte))
}

print(hexString)

和此代码用于将密钥字符串转换为SHA1

func toSHA1() -> String {
        let data = self.data(using: String.Encoding.utf8)!
        var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
        data.withUnsafeBytes {
            _ = CC_SHA1($0, CC_LONG(data.count), &digest)
        }
        let hexBytes = digest.map { String(format: "%02x", $0) }

        return hexBytes.joined()
    }

结果是

faa3c04b058d38cecf1243421a596742a6cf1188

因此使用此onlineHMAC Generator输出相同的结果。 但我想要的输出应该是

38b24d28d64f2459d42d1ecd1c9fa375ffeb369f

我可以通过在提供的页面中将Key类型更改为HEX来实现。

因此,我现在的问题是如何在代码中获得相同的输出? 我需要将密钥转换为十六进制吗?

通过将摘要作为键而不是将其转换为字符串来修复它。

这是更新的代码

let key = "foo".toSHA1()
let data = "bar"
var results = [CUnsignedChar](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))

CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), key, key.count, data, data.count, &results)

let hmacData:NSData = NSData(bytes: results, length: (Int(CC_SHA1_DIGEST_LENGTH)))

var bytes = [UInt8](repeating: 0, count: hmacData.length)
hmacData.getBytes(&bytes, length: hmacData.length)

var hexString = ""
for byte in bytes {
    hexString += String(format:"%02hhx", UInt8(byte))
}

print(hexString)


func toSHA1() -> [UInt8] {
        let data = self.data(using: String.Encoding.utf8)!
        var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
        data.withUnsafeBytes {
            _ = CC_SHA1($0, CC_LONG(data.count), &digest)
        }

        return digest
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM