我有一个bash脚本,我试图移植到Windows。它需要一个输入字符串并通过stdin
传递给openssl
以创建hmac
。
我该怎么移植?
echo -n $BUILD | "$OPENSSL" dgst -sha256 -mac HMAC -macopt hexkey:$SECRET | awk '{ print $2 }'
* BUILD来自脚本的输入参数。似乎-mac和-macopt在Windows二进制文件上不是有效选项。脚本应该在控制台上显示hmac。
答案 0 :(得分:1)
这是指定脚本的批处理版本(当然,仍需要openssl)
@echo off
setlocal enableextensions disabledelayedexpansion
set "BUILD=something"
set "SECRET=0102030405060708090a0b0c0d0e0f"
set "OPENSSL=x:\somewhere\openssl.exe"
for /f "tokens=2" %%a in ('
^<nul set /p ".=%BUILD%"
^| "%OPENSSL%" dgst -sha256 -mac HMAC -macopt hexkey:%SECRET%
') do echo %%a
在批处理中,使用set
为变量分配值,并且不使用$VAR
语法检索其值,%VAR%
在批处理中,echo
命令将始终包含CR + LF行尾,-n
选项不存在。可以使用<nul set /p
命令复制(有限制)。
如果您有awk
的Windows二进制文件,则可以保留原始代码中使用的相同管道,但使用双引号,而不是单引号。建议的代码使用for /f
命令读取set /p | openssl
管道的输出并检索行中的第二个标记(默认分隔符是空格和制表符)
在in
命令的for /f
子句中使用时,需要对重定向和管道字符进行转义,^<
和^|
<的原因/ p>
注意:使用openssl 1.0.2g进行测试(我手边的内容),-mac
和-macopt
参数可以正常运行。