当前位置 : 主页 > 手机开发 > 其它 >

用于Swift中OAuth签名的HMAC-SHA1

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在尝试在我的应用程序中为 Swift 2制作OAuth模块.我坚持使用HMAC-SHA1签名生成,因为我的函数返回错误的base64 hmac-sha1进行签名.你能帮帮我吗?怎么了? func URLEncodedKey() - String? { let ke
我正在尝试在我的应用程序中为 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”.

网友评论