openssl 函数随机返回警告:命令替换:忽略输入中的空字节

openssl 函数随机返回警告:命令替换:忽略输入中的空字节

我尝试加密一些负载,这是一个最小工作示例(是 RSA 私钥)

 to_be_signed="2f93992bb1db9cab0b3b8fc2de0a2863"
 #to_be_signed="7d6d2a584a227574e1c113aab56ea490"
 # Sign poly_1305 with private key
 signature=$(openssl dgst \
   -sha256 \
   -sign ${privkey} \
   <(echo "${to_be_signed}")
 )
 if [ ${?} -eq 0 ]; then
    echo "[*] to_be_signed correctly signed"
 else
    echo "ERROR signing to_be_signed" && exit 2
 fi

第一个to_be_signed没有生成任何警告,第二个to_be_signed生成了:警告:命令替换:忽略了输入中的空字节

这到底是什么意思?对于某些特定值,我收到此与 bash 相关的警告;我用来对值进行签名的方式是否存在任何流程?

我绝对需要使用变量来将它们的值保存在内存中,即不存储在磁盘上的临时文件中。这是一个强烈的要求。

答案1

你的 shell 会对某些字符进行不同的处理 - 并且二进制签名可以包含任意数据。

  • 如果您打算合作[a-f0-9](正如您的输入所建议的那样)请加入-hex通话dgst
  • 如果您打算使用二进制数据,请更改传递包含空值的方式。管道将起作用,但直接使用包含空字节的字符串作为命令参数或分配给 shell 变量则不起作用。

提示:使用该程序shellcheck生成有关此问题的自动警告 - 以及所有此类语法,您的代码可能会触发意外的 shell 解析器奇怪之处/功能。

相关内容