10

PHP と Objective-C を使用して認証ソリューションを実装しようとしています。どちらの言語も、同じキーと同じシークレットを使用して独自の HMAC-SHA1 でエンコードされた文字列を作成します。

どうやらやり方が違うようです。

Objective-C 側では、正しい外観のエンコードされた文字列を生成する署名クラスとして OAuthCustomer を使用しています。

/3n/d4sKN6k3I7nBm1qau59UukU=

PHP側では、これを生成するbase64エンコーディングで組み込み関数 hash_hmac('sha1',...) を使用しています:

ZmY3OWZmNzc4YjBhMzdhOTM3MjNiOWMxOWI1YTlhYmI5ZjU0YmE0NQ==

次に、別の関数(ここで説明)を使用しようとしましたが、これは base64 エンコーディングで次のように生成されます。

NWY1ODUwOWE3NGI4NWU5ZTIxMDYzMTNmNzk3NTYxMDQ4OWE1MmUzNQ==

この問題を解決する方法がまったくわからず、なぜこれが起こるのかさえわかりません。

助けてくれてありがとう、

ポール

4

1 に答える 1

27

さて、私は偽の答えを追加します。(Stackoverflow では、すべての質問を回答で装飾する必要があります。)

PHP のハッシュ関数は、ほとんどの場合、実際のデータではなく、16 進文字列を返します。(理由はともかく)。通常、他の実装が期待するものと互換性を持たせるための関数パラメーターがあります。

 hash_hmac("sha1", $data, $key, $raw_output=TRUE);

 md5($str, $raw_output=TRUE);

 hash("sha1", $data, $raw_output=TRUE);
于 2010-12-25T14:03:38.507 に答える