问题
我的命令脚本生成的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");
感谢您的时间。