HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 使用CCHmac()生成HMAC swift sdk8.3大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在SDK8.3之前我用这种方式生成了我的hmac.现在我在CCHmac()函数上出错了.由于我是初学者,我无法弄清楚如何解决它.在此先感谢您的帮助!

func generateHMAC(key: String,data: String) -> String {

    let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding)
    let cData = data.cStringUsingEncoding(NSUTF8StringEncoding)

    var result = [CUnsignedChar](count: Int(CC_SHA512_DIGEST_LENGTH),repeatedValue: 0)
    CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA512),cKey,strlen(cKey!),cData,strlen(cData!),&result)


    let hash = NSMutableString()
    for var i = 0; i < result.count; i++ {
        hash.appendFormat("%02hhx",result[i])
    }

    return hash as String
}

解决方法

问题是strlen返回一个UInt,而CCHmac的长度参数是Ints.

然你可以做一些强制,你也可以只使用两个数组的count属性而不是调用strlen.

func generateHMAC(key: String,data: String) -> String {

    var result: [CUnsignedChar]
    if let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding),cData = data.cStringUsingEncoding(NSUTF8StringEncoding)
    {
        let algo  = CCHmacAlgorithm(kCCHmacAlgSHA512)
        result = Array(count: Int(CC_SHA512_DIGEST_LENGTH),repeatedValue: 0)

        CCHmac(algo,cKey.count-1,cData.count-1,&result)
    }
    else {
        // as @marTinR points out,this is in theory impossible 
        // but personally,I prefer doing this to using `!`
        fatalError("Nil returned when processing input Strings as UTF8")
    }

    let hash = NSMutableString()
    for val in result {
        hash.appendFormat("%02hhx",val)
    }

    return hash as String
}

大佬总结

以上是大佬教程为你收集整理的ios – 使用CCHmac()生成HMAC swift sdk8.3全部内容,希望文章能够帮你解决ios – 使用CCHmac()生成HMAC swift sdk8.3所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。