2017-05-12 64 views
-1

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

我该如何移植它?

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

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

+0

在问之前你有没有尝试过任何东西?我看不到您的努力或批处理代码 – jeb

+1

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布关于Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww

回答

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命令,为^<^|

的原因:使用OpenSSL 1.0.2g(我已在手的)测试和-mac-macopt参数WOR k没有问题。

+0

钉住它。谢谢。 – Avram