Bash 스크립트는 PHP와 다르게 "hash hmac"을 생성합니다.

Bash 스크립트는 PHP와 다르게 "hash hmac"을 생성합니다.

질문

내 명령 스크립트는 sometimesPHP 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'sprintf %s댓글이 성공적으로 작성되었습니다 . 문제는 에 있습니다 .

작업 코드

$result = exec("printf %s " . $username . " | openssl dgst -sha1 -hmac " . $secret . " -binary | base64");

시간 내 주셔서 감사합니다.

관련 정보