加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用于Swift中OAuth签名的HMAC-SHA1

发布时间:2020-12-14 04:33:30 所属栏目:百科 来源:网络整理
导读:我正在尝试在我的应用程序中为 Swift 2制作OAuth模块.我坚持使用HMAC-SHA1签名生成,因为我的函数返回错误的base64 hmac-sha1进行签名.你能帮帮我吗?怎么了? func URLEncodedKey() - String? { let key = "efgh" let string = "GEThttp%3A%2F%2Fhost.net%2F
我正在尝试在我的应用程序中为 Swift 2制作OAuth模块.我坚持使用HMAC-SHA1签名生成,因为我的函数返回错误的base64 hmac-sha1进行签名.你能帮帮我吗?怎么了?

func URLEncodedKey() -> String? {   
    let key = "efgh"
    let string = "GET&http%3A%2F%2Fhost.net%2Fresource&name%3Dvalue%26name%3Dvalue%26oauth_consumer_key%3Dabcd%26oauth_nonce%3DxUwWEy3LVsI%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1441375089%26oauth_token%3Dijkl%26oauth_version%3D1.0"

    guard let keyData = key.dataUsingEncoding(NSUTF8StringEncoding),stringData = string.dataUsingEncoding(NSUTF8StringEncoding),outputData = NSMutableData(length: Int(CC_SHA1_DIGEST_LENGTH)) else {
            return nil
    }
    outputData.length = Int(CC_SHA1_DIGEST_LENGTH)

    CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1),keyData.bytes,keyData.length,stringData.bytes,stringData.length,outputData.mutableBytes)

    return outputData
        .base64EncodedStringWithOptions([])
}

用于检查:

String for encode: in code

Correct: O8UjUTYX1UxKF93KaY/mta9HETs=
My (incorrect): f5elSONqP6nPdpgBIyroJTCN19s=

正确的编码器在这里(javascript):https://oauth.googlecode.com/svn/code/javascript/example/signature.html

解决方法

您的方法必须按原样返回正确的结果.

见http://oauth.net/core/1.0/#signing_process:

The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] where the Signature Base String is the text and the key is the concatenated values (each first encoded per Parameter Encoding) of the Consumer Secret and Token Secret,separated by an ‘&’ character (ASCII code 38) even if empty.

在这种情况下,关键应该是“efgh& mnop”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读