0 レビュー
2 回答
PHPのHMAC-SHA-256
この文字列から認証ハッシュを作成する必要があります:
kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F
このシークレットはHMACハッシュ関数に使用されます:
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
生成する必要のある認証ハッシュは次のとおりです:
P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=
注意すべき点がいくつかあります:
- 署名は、 RFC2104で指定されているHMAC-SHA-256を使用して作成する必要があります。
- 署名は、 RFC4648セクション5(安全なアルファベット)で指定されているBase64URL互換でエンコードする必要があります。
生成のために与えられたいくつかの擬似コードもあります:
Signatur(Request) = new String(encodeBase64URLCompatible(HMAC-SHA-256(getBytes(Z, "UTF-8"), decodeBase64URLCompatible(getBytes(S, "UTF-8")))), "UTF-8")
PHPでさまざまなことを試しましたが、正しいアルゴリズムがまだ見つかりませんでした。これは私が今持っているコードです:
if(!function_exists('base64url_encode')){
関数base64url_encode($ data){
$ data = str_replace(array('+'、'/')、array('-'、'_')、base64_encode($ data));
$dataを返します。
}
}
$ str = "kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F";
$ sec = "LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=";
$ signature = mhash(MHASH_SHA256、$ str、$ sec);
$ signature = base64url_encode($ signature);
if($ signature!= "P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=")
echo "間違った:$ signature";
そうしないと
エコー「正しい」;
この署名を与えます:
K9lw3V-k5gOedmVwmO5vC7cOn82JSEXsNguozCAOU2c=
ご覧のとおり、44文字の長さが正しいです。間違いを見つけるのを手伝ってください。この単純な問題にはまだ何時間もかかり、解決策はありません。
わからない
0
レビュー
答え :
解決策:
注意すべき点がいくつかあります:
- キーはbase64でエンコードされています。 php関数で使用する前に、デコードする必要があります。それはあなたが見逃した最も重要なことです。
- MhashはHash拡張機能によって廃止されました。
- 出力をカスタム形式でエンコードする必要があるため、hmac関数からの生の出力が必要になります(デフォルトでは、phpで16進エンコードされます)。
したがって、ハッシュ拡張を使用すると、次のようになります。
$key = "LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ="; $str = "kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F"; function encode($data) { return str_replace(['+', '/'], ['-', '_'], base64_encode($data)); } function decode($data) { return base64_decode(str_replace(['-', '_'], ['+', '/'], $data)); } $binaryKey = decode($key); var_dump(encode(hash_hmac("sha256", $str, $binaryKey, true)));
出力:
string(44) "P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI="
わからない
0
レビュー
答え :
解決策:
PHPで使用可能なhash_hmac()関数を使用するだけです。
例:
hash_hmac('sha256', $string, $secret);
こちらのドキュメント: http://php.net/manual/fr/function.hash-hmac.php
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。