質問
私のコマンドスクリプトはsometimes
PHPhash_hmac
コマンドとは異なる結果を生成します。誰かがこれをどのように行うべきかを説明したり、例を挙げたりできますか?
このスクリプトはタイムスタンプに基づいてユーザー名を生成します。異なる結果を生成するユーザー名の例:1611134116:admin
フルスクリプト
<?php
$secret="XXXXXXXXXXXX";
$user = "admin";
$ttl = 24 * 3600; // Time to live
$time = time() + $ttl;
$username = $time . ':' . $user;
$password = base64_encode(hash_hmac('sha1', $username, $secret, true));
$password2 = base64_encode(hash_hmac('sha1', $username, $secret, true));
$result2 = base64_encode(hash_hmac('sha1', $username, $secret, true));
$result = exec("printf %s $(printf %s " . $username . " | openssl dgst -sha1 -hmac " . $secret . " -binary) | base64");
echo $username;
echo "<br><br>";
echo $result;
echo "<br>";
echo $result2;
echo "<br>";
echo ("Is equal: " . (($result === $result2) ? "true" : "false"));
echo "<br><br>";
echo $password;
echo "<br>";
echo $password2;
echo "<br>";
echo ("Is equal: " . (($password === $password2) ? "true" : "false"));
問題のある部分
$result = exec("printf %s $(printf %s " . $username . " | openssl dgst -sha1 -hmac " . $secret . " -binary) | base64");
Note:
この問題は、出力がバイナリとして生成された場合にのみ発生します。これは私にとって非常に重要です。
使用echo -n
して停止してみましvariables
たが、問題は持続します。
答え1
muru's
printf %s
コメントが正常に作成されました。問題はにあります。
作業コード
$result = exec("printf %s " . $username . " | openssl dgst -sha1 -hmac " . $secret . " -binary | base64");
時間をいただきありがとうございます。