6

次の C# コードを PHP に変換したいと考えています。

C# は次のとおりです。

byte[] operation = UTF8Encoding.UTF8.GetBytes("getfaqs");
byte[] secret = UTF8Encoding.UTF8.GetBytes("Password");

var hmac = newHMACSHA256(secret);
byte[] hash = hmac.ComputeHash(operation);

私はこれに変わりました:

$hash = hash_hmac( "sha256", utf8_encode("getfaqs"), utf8_encode("Password"));

で、〜がある:

var apiKey = "ABC-DEF1234";
var authInfo = apiKey + ":" + hash

//base64 encode the authorisation info
var authorisationHeader = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo));

私は次のようにすべきだと思います:

$authInfo = base64_encode($apiKey . ":" . $hash);

または

$authInfo = base64_encode(utf8_encode($apiKey . ":" . $hash));

しかし、確実ではありません。この 2 番目のエンコーディングでは、UTF8Encoding.UTF8 ではなく、Encoding.UTF8 が使用されていることに注意してください。

PHPコードはどのように見えるべきですか?

4

1 に答える 1

6

PHP文字列はすでに(一種の)ものでありbyte[]、phpにはエンコーディングの認識がありません。utf8_encode実際にはISO-8859-1をUTF-8に変換するため、ここでは必要ありません。

これらの文字列がファイル内のリテラルである場合、そのファイルはUTF-8エンコーディングで保存する必要があります。

4番目のパラメーターとしてに渡しtrue、それらの呼び出しhash_hmacを削除します。utf8_encode

$hash = hash_hmac( "sha256", "getfaqs", "Password", true );

また、文字列連結演算子は.、なので:

$authInfo = base64_encode($apiKey . ":" . $hash);
于 2012-11-08T23:42:12.200 に答える