将输入参数管道输入openssl

时间:2017-05-12 08:13:04

标签: batch-file scripting openssl

我有一个bash脚本,我试图移植到Windows。它需要一个输入字符串并通过stdin传递给openssl以创建hmac

我该怎么移植?

echo -n $BUILD | "$OPENSSL" dgst -sha256 -mac HMAC -macopt hexkey:$SECRET | awk '{ print $2 }'

* BUILD来自脚本的输入参数。似乎-mac和-macopt在Windows二进制文件上不是有效选项。脚本应该在控制台上显示hmac。

1 个答案:

答案 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参数可以正常运行。