0
私はこれに関して数多くの質問を見てきましたが、間違いを確認することはできません。 Azure SBキューにアクセスするために共有アクセス署名を生成しようとしています。HMACハッシュをC#からPHPに変換する
私のC#のコードが正しく動作している:私は$stringToSign
と$key
はなく、ハッシュで、strtoupper
とstrtolower
をコードして試してみた
$stringToSign = rawurlencode($resourceURI);// . "%0A" . $expiry;
$sig = hash_hmac("sha256",utf8_encode($stringToSign),utf8_encode($key),false);
echo $sig."<br>";
$token = "SharedAccessSignature sr=".urlencode($resourceURI)
."&sig=".rawurlencode(base64_encode($sig))."&se=".$expiry."&skn=".$keyName;
return $token; //returns MGNlZWViYWRmMjE2NWJhZGRjNWNhNDZkYWRlOTQyMzc3ODBhMWM2ZjA1OTk4MjI0MGUzMzllZmY4ZTk2OGUxNA==
:
var expiry = 1499177142;// GetExpiry();
string stringToSign = HttpUtility.UrlEncode(resourceUri);// + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
Console.WriteLine(Encoding.UTF8.GetBytes(stringToSign));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
Console.WriteLine(signature);
var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
return sasToken;
// returns slXBw0u7Dt/YKS1Y+Wot02z730YXJ9NkS599JRzvDQI= for the signature element
私のPHPは非常に異なる結果をもたらします$stringToSign
にあるが、Cと同じ結果を得ることはできない。
PHP入力データの文字セット/エンコーディングをチェックします。 https://stackoverflow.com/questions/12804231/c-sharp-equivalent-to-hash-hmac-in-php – DanielO
'$ resourceURI =" https:// abcの時点で文字列として追加しています。 servicebus.windows.net/myqueue ";'、$ keyと同じです –