1
$signData = hash_hmac("sha1", 'GET\n1344250030\n/contacts.json', 
              base64_decode($this->api_secret));

$signData = base64_encode($signData);

api_secret の値は

LPq6ZD2JdyPnBvxf6p6h

結果 $signData の値は

ZTYxM2NkymNhZDJiZDUxZWUwMWIYNGRlZTlMYTc3MDlim2FiY2NhYQ==

しかし、$signData で期待される結果は

QbOd8%2BOIzHMKrmEpf4G%2FZFWLAx8%3D

この期待される結果を URL 接続に使用する必要があります。

私はどこで間違っていますか?助けて。

4

1 に答える 1

0

完全なJavaプログラムを作成

package javaapplication1;

import java.net.URLEncoder;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public class JavaApplication1 {

    public static void main(String[] args) {
        try {
            System.out.println(signData("GET\n1344250030\n/contacts.json"));
        } catch (Exception ex) {
            Logger.getLogger(JavaApplication1.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private static String signData(String data) throws Exception {
        Mac mac = Mac.getInstance("HmacSHA1");
        mac.init(new SecretKeySpec(Base64.decodeBase64("LPq6ZD2JdyPnBvxf6p6h"), "HmacSHA1"));
        String sig = new String(Base64.encodeBase64(mac.doFinal(data.getBytes())));
        return URLEncoder.encode(sig, "UTF-8");
    }
}

URLEncoder に気づいたので、それを PHP に追加しました。また、\n が機能しないため、URL で二重引用符を使用する必要があると思われます。このコードを与えた:

<?php

$signData = hash_hmac("sha1", "GET\n1344250030\n/contacts.json", 
              base64_decode('LPq6ZD2JdyPnBvxf6p6h'), true);
$signData = base64_encode($signData);
echo urlencode($signData);

どちらも同じ結果になりますが、期待したものではありません。

fH%2F0XJpooui3U2nyd%2FCD9YjRVGM%3D

あなたの入力が正しいと確信していますか?URLと秘密の両方?

于 2012-08-06T11:53:17.483 に答える