【问题标题】:HMAC-SHA1 for OAuth Signature in SwiftSwift 中用于 OAuth 签名的 HMAC-SHA1
【发布时间】:2015-09-04 13:04:13
【问题描述】:

我正在尝试在我的应用程序中为 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

【问题讨论】:

    标签: swift oauth sha1


    【解决方案1】:

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

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

    HMAC-SHA1 签名方法使用 [RFC2104] 中定义的 HMAC-SHA1 签名算法,其中 Signature Base String 是文本,key 是 Consumer Secret 和 Token Secret,用 '&' 字符分隔(ASCII 码 38) 即使为空。

    在这种情况下,密钥应该是"efgh&mnop"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多