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));

但不确定,请注意第二个编码使用 Encoding.UTF8,而不是 UTF8Encoding.UTF8。

PHP 代码应该是什么样的?

4

1 回答 1

6

PHP 字符串已经是(某种)byte[],php 没有任何编码意识。utf8_encode实际上将 ISO-8859-1 转换为 UTF-8,所以这里不需要。

如果这些字符串是您文件中的文字,则该文件只需要以 UTF-8 编码保存。

作为第 4 个参数传递truehash_hmac删除这些utf8_encode调用:

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

此外,字符串连接运算符是., 所以 :

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