Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HMAC-SHA1用于Swift中的OAuth签名_Swift_Oauth_Sha1 - Fatal编程技术网

HMAC-SHA1用于Swift中的OAuth签名

HMAC-SHA1用于Swift中的OAuth签名,swift,oauth,sha1,Swift,Oauth,Sha1,我正在尝试在我的应用程序中为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%26oau

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

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

见:

HMAC-SHA1签名方法使用[RFC2104]中定义的HMAC-SHA1签名算法,其中签名基字符串是文本,
消费者机密和令牌机密的串联值(每个值首先按照参数编码编码),由“&”字符分隔(ASCII码38)即使是空的

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