Hash HMAC openssl的奇怪行为

Hash HMAC openssl的奇怪行为,hash,openssl,hmac,Hash,Openssl,Hmac,我需要执行hmac openssl,但当更改参数时,我有一个奇怪的行为 使用这些值,HMAC可以正常工作 $ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -hmac `printf 71ef1c30a1a5503dd387aac85b714b779c7df8bc163b1fad66b1d51c94cd221e|

我需要执行hmac openssl,但当更改参数时,我有一个奇怪的行为

使用这些值,HMAC可以正常工作

$ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -hmac `printf 71ef1c30a1a5503dd387aac85b714b779c7df8bc163b1fad66b1d51c94cd221e|xxd -r -p` | awk '{print $2}'
71af33b003e7e8033fcec8ad2ef46ee22b6518ae072fae24708201542d1b01bbe0b67fce1733443bfaddd52307e28fbe4e3c0945be31853d8f1caeb078dfc220
将值
71ef1c30a1a5503dd387aac85b714b779c7df8bc163b1fad66b1d51c94cd221e
更改为新值
2C31FBB2B809B2252FE64EC6D0011A8EAAA4D0A72EEDF0A1E1DCF114320

$ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -hmac `printf 2C31FBB2B809A9B2252FE64EC6D0011A8EAAA4D0A72EEEDF0A1E1DCF1B514320 |xxd -r -p` | awk '{print $2}'
%/NЧ.: No such file or directory
C: No such file or directory
更新 我试过用-macopt

第一个结果是一样的

$ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -mac HMAC -macopt key:`printf 71ef1c30a1a5503dd387aac85b714b779c7df8bc163b1fad66b1d51c94cd221e|xxd -r -p`   
(stdin)= 71af33b003e7e8033fcec8ad2ef46ee22b6518ae072fae24708201542d1b01bbe0b67fce1733443bfaddd52307e28fbe4e3c0945be31853d8f1caeb078dfc220
第二个结果是同样的问题

$ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -mac HMAC -macopt key:`printf 2C31FBB2B809A9B2252FE64EC6D0011A8EAAA4D0A72EEEDF0A1E1DCF1B514320|xxd -r -p`   
??%/?N?????Ч.??: No such file or directory
?C: No such file or directory
尝试使用双引号

$ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -hmac "`printf 71ef1c30a1a5503dd387aac85b714b779c7df8bc163b1fad66b1d51c94cd221e|xxd -r -p`" | awk '{print $2}'
71af33b003e7e8033fcec8ad2ef46ee22b6518ae072fae24708201542d1b01bbe0b67fce1733443bfaddd52307e28fbe4e3c0945be31853d8f1caeb078dfc220

$ printf 03d4f7e460787295bb803f7f9fa3c023b3cb33623aadbea53720decfa5a4f6005800000000 |xxd -r -p | openssl dgst -sha512 -hmac "`printf 2C31FBB2B809A9B2252FE64EC6D0011A8EAAA4D0A72EEEDF0A1E1DCF1B514320 |xxd -r -p`" | awk '{print $2}'
3b63439866b95de9d5402688dd26162fdd25646262087bebdffe024c5136954ea34a8f908de1b523ebf3fa86813db6a098d153ac79a8905e520134799fec8247

将任意字节序列作为-hmac选项的参数可能是错误的。openssl文档不清楚该密钥应该是什么,但可以肯定的是,它将被解析为字符串并在之后进行处理,就像任何命令行程序的任何其他选项一样。感谢您的回复,你有什么建议吗?尝试使用
-mac hmac-macopt hexkey:71ef1c30a5a503dd387aac85b714b779c7df8bc163b1fad66b1d51c94cd221e
@PresidentJamesK.Polk和-macopt结果不同,更新我的问题你不能创建包含任意字节的命令行,你仍在这样做。要允许使用任意字节指定键或任何其他值,必须执行其他操作。openssl通过提供一个
hexkey
选项来解决这个问题。在命令行上以包含十六进制数字的ASCII字符串的形式提供密钥,openssl在内部将其解析为所需的字节。不要执行
键:`printf ABCD | xxd-r-p`
,这样不行。相反,请执行以下操作:
hexkey:ABCD
。命令行上不应有xxd-r输出。