微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OpenSSL HMCA SHA1 未给出预期结果

如何解决OpenSSL HMCA SHA1 未给出预期结果

根据最佳答案 here,我正在尝试使用 OpenSSL 在 CMD 中生成校验和。

但是,使用提供的示例,我得到了意想不到的结果:

C:\>echo -n "value" | openssl dgst -sha1 -hmac "key"
(stdin)= 8c5b4c3a9cee7bc9020a43f1c396f9e13c2bae4a

原始问题中显示的预期结果,我也使用其他 HMAC SHA1 生成器得到的结果是:

57443a4c052350a44638835d64fd66822f813319

奇怪的是,我在 PowerShell 中得到了第三个结果:

PS C:\> echo -n "value" | openssl sha1 -hmac "key"
(stdin)= 56d96e5393d98eb5e189ab189e02b1832af727b5

这可能是不言而喻的,我在这里有点超出我的舒适区,所以请原谅我的解释中的任何明显错误或缺点。

解决方法

将关于 SO 的几个问题的答案拼凑起来教了一些技巧,以在所有三种情况下获得相同的结果:

在类似 *nix 的环境(包括 macOS)中,printf 是一种更便携的打印方式,无需换行:

$ printf value | openssl dgst -sha1 -hmac key
57443a4c052350a44638835d64fd66822f813319

在 CMD 中避免换行的技巧(注意第二个 | 之前没有空格,这是必不可少的):

>echo | set /p=value| openssl dgst -sha1 -hmac key
(stdin)= 57443a4c052350a44638835d64fd66822f813319

根据 PowerShell GitHub 项目中的这个问题:Piping Text To An External Program Appends A Trailing Newline,目前使用 PowerShell 似乎不可能“本地化”。如果您真的必须在 PowerShell 提示符下执行此操作,则可以调用 CMD,如下所示:

> cmd /c "echo | set /p=value| openssl dgst -sha1 -hmac key"
(stdin)= 57443a4c052350a44638835d64fd66822f813319

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。