질문
내 명령 스크립트는 sometimes
PHP hash_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");
시간 내 주셔서 감사합니다.