BASH 二进制到十六进制以匹配 PHP bin2hex 函数?

BASH 二进制到十六进制以匹配 PHP bin2hex 函数?

在 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

-e设置格式字符串hexdump,它“必须用双引号 (" ) 标记括起来”。/1格式字符串 一次使用一个字节%x,以十六进制打印它(否则字节顺序可能会导致不同的输出)。-v是让它也打印重复的数据(默认是将它们替换为*)。

答案2

是的,xxd你可以做同样的事情:

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

-p 标志用于没有偏移信息的十六进制转储。
-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

用perl的unpack

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

相关内容