以下是命令:echo -n "x-date: Wed, 13 Oct 2021 09:30:00 GMT" openssl dgst -binary -sha256 -hmac "abc" | openssl base64
窗口中的结果:LW4gIngtZGF0ZTogV2VkLCAxMyBPY3QgMjAyMSAwOTozMDowMCBHTVQiIG9wZW5zc2wgZGdzdCAtYmluYXJ5IC1zaGEyNTYgLWhtYWMgImFiYyIgDQo=
Linux中的结果:eC1kYXRlOiBXZWQsIDEzIE9jdCAyMDIxIDA5OjMwOjAwIEdNVCBvcGVuc3NsIGRnc3QgLWJpbmFyeSAtc2hMjU2IC1obWFjIGFiYw==
如何使用windows命令生成相同的结果(Linux版本)?
非常感谢。
替换";abc";用";XciGdDmDTd5a9oArnATg3d3W1OZiJD7X";
Linux
echo-n";x日期:2021年10月13日星期三09:30:00 GMT"|openssl-dgst-binary-sha256-hmac";XciGdDmDTd5a9oArnATg3d3W1OZiJD7X"|openssl base64
Windows
set/p=";x日期:2021年10月13日星期三09:30:00 GMT openssl dgst-binary-sha256-hmac XciGdDmDTd5a9oArnATg3d3W1OZiJD7X";伪<nul|openssl base64
首先,这似乎根本不是编程,很可能已经关闭,因为主题性在过去一两年里变得相当严格。
其次,您在这里没有创建任何类型的签名。您只是对一个字符串进行base64编码,而该字符串在两个系统上是不同的,因为在Windows上,您使用的是命令处理器cmd
的echo
命令,该命令源自MSDOS,与通常由Unix shell提供的echo
命令明显不同(尽管它可能不同)。具体来说,您的Linux值是字符的base64编码
x-date: Wed, 13 Oct 2021 09:30:00 GMT openssl dgst -binary -sha256 -hmac abc
其通过形式CCD_ 5的命令输出到大多数(但不是所有)Unix外壳,而您的Windows值是字符的base64编码
-n "x-date: Wed, 13 Oct 2021 09:30:00 GMT" openssl dgst -binary -sha256 -hmac "abc"
然后是空格、回车和换行。请注意添加的dash-n-and-space和引号(两者都被视为数据;CMDecho
不采用-n
形式的选项,也不像Unix shell或移植的Unix风格程序那样处理引号)以及尾部空格(CMD在Windows上运行命令的方式与shell在Unix上运行命令方式之间的差异)和CRLF。
如果你在Windows 10上,你可以安装"Windows Linux子系统"(WSL)和任何常见的Linux发行版,并以与任何真正的Unix基本相同的方式使用它。
要在CMD中做到这一点,你需要像这样作弊:
c:temp>set /p="x-date: Wed, 13 Oct 2021 09:30:00 GMT openssl dgst -binary -sha256 -hmac abc" dummy <nul | openssl base64
eC1kYXRlOiBXZWQsIDEzIE9jdCAyMDIxIDA5OjMwOjAwIEdNVCBvcGVuc3NsIGRn
c3QgLWJpbmFyeSAtc2hhMjU2IC1obWFjIGFiYw==
powershell中可能有更好的方法,它可以纠正CMD中的许多小缺陷和愚蠢的事情,但我还没有学到足够的知识。
但我不明白你为什么要这样做;这个值基本上是无用的。你可能想要(或被告知)做的是用给定的密钥计算日期值的SHA256-HMAC。要在Unix(或WSL)上执行此操作,您需要将命令更改为
echo -n "x-date: Wed, 13 Oct 2021 09:30:00 GMT" | openssl dgst -binary -sha256 -hmac "abc" | openssl base64
*****NOTICE PIPE CHARACTER ADDED HERE ----------^
但对于CMD,你需要作弊。
最后,我安装WSL并在命令行中执行:
wsl echo -n "x-date: Wed, 13 Oct 2021 09:30:00 GMT" | openssl dgst -binary -sha256 -hmac "XciGdDmDTd5a9oArnATg3d3W1OZiJD7X" | openssl base64
它有效。