PHPでヘッダーの承認が必要なAPIにアクセスしようとしています。この承認では、SHA256ハッシュの一部にキーを使用します。 APIの作成者は、このハッシュを作成するためにC#で書かれた.exeを私に提供しました。しかし、今は.exeを使用することは現実的ではなく、PHPでやりたいと思います。PHPでC#SHA256ハッシュをレプリケートする
ハッシュを作成する正しいC#コードは次のとおりです。
var url = "[url]";
var userId = "apiuser";
var timestamp = "Fri, 14 Jul 2017 00:28:07 GMT"; // DateTime.UtcNow;
var keyString = "dGVzdA==";
var hashData = String.Format("GET\n{0}\n{1}\n{2}\n", url, userId, timestamp); //.ToString("r"));
var key = Convert.FromBase64String(keyString);
string hashString;
using (var hmac = new HMACSHA256(key))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(hashData));
hashString = Convert.ToBase64String(hash);
}
Console.WriteLine(hashString);
C#のハッシュ:私が試みた6cI0NV6AKYILTyYHs + hyA0 + Q4iRfMw + H2FGsp7uKOFM =
:CfS6zNR3pTP0kJIA0RJ7LUwQXjONroVIg65bDvuefH8は=ここ
はPHP
でそれを複製する私の試み$key = "dGVzdA==";
$user = "apiuser";
$url = "[url]";
$timestamp = "Fri, 14 Jul 2017 00:28:07 GMT"; // date("D, d M Y H:i:s e");
$hashdata = 'GET\n' . $url . '\n' . $user . '\n' . $timestamp;
$generatedhash = base64_encode(hash_hmac('sha256', $hashdata, base64_decode($key), true));
print_r($generatedhash);
PHPハッシュですPHPの生成されたハッシュに対するさまざまなアプローチが多く、同じものはありませんでした。また、PHPの日付がC#の日付と同じかどうかはわかりませんが、それは待つことができます。どんな助けもありがとうございます。
すべての\ nを二重引用符で囲んでください。 –