PHP bin2hex 함수와 일치하도록 BASH 바이너리를 16진수로 변환하시겠습니까?

PHP bin2hex 함수와 일치하도록 BASH 바이너리를 16진수로 변환하시겠습니까?

Bash에서는 PHP를 호출하고 다음 명령을 실행할 수 있습니다.

testKey='8798(*&98}9%"^8&]8_98{9798**76876'
testHex=$(php -r "echo bin2hex('$testKey');")
echo $testHex

이로 인해 38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736

PHP를 사용할 수 없는 시스템이 있습니다. bash만 사용하여 동일한 결과를 얻을 수 있는 방법이 있습니까?

감사해요

답변1

누워 있는 경우 hexdump:

$ printf "%s" "$testKey" | hexdump -ve '/1 "%x"'
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736

-ehexdump"큰따옴표(")로 묶어야 하는 형식 문자열을 설정합니다 . /1형식 문자열은 한 번에 1바이트를 사용하여 %x16진수로 인쇄합니다(그렇지 않으면 바이트 순서로 인해 다른 출력이 발생할 수 있음) -v. 기본값은 )로 바꾸는 것입니다 *.

답변2

예, xxd동일한 작업을 수행할 수 있습니다.

testKey='8798(*&98}9%"^8&]8_98{9798**76876'
testHex=$(echo -n "${testKey}" | xxd -p -c 100)

-p 플래그는 오프셋 정보가 없는 16진수 덤프에 사용됩니다.
-c 100 플래그는 100자(기본값 16, 최대 256)의 행 길이에 적용됩니다.

답변3

"Just bash"로 다음 트릭을 사용하십시오.BASH 인쇄 문제(printf \$(printf '%03o' $1))

$ for ((i=0;i<${#testKey};i++)); do printf '%x' "$(printf "'%c" "${testKey:i:1}")"; done; echo
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736

펄을 사용하여unpack

$ perl -E 'say unpack "H*", $ARGV[0]' "$testKey"
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736

관련 정보