提问人:Harald 提问时间:9/18/2018 最后编辑:jpsHarald 更新时间:5/16/2023 访问量:14080
jwt.io 上的“秘密 base64 编码”是什么意思,我将如何用“openssl dgst”模拟它
What does "secret base64 encoded" on jwt.io mean and how would I simulate it with `openssl dgst`
问:
我尝试从 jwt.io 和 .只要我不标记“secret base64 encoded”,我就可以取签名前的部分,运行一遍openssl
echo -n "pasted data from jwt.io" | \
| openssl dgst -binary -sha512 -hmac abc \
| openssl enc -base64 -A;
我从 openssl 返回了与 jwt.io 显示的相同的签名(使用 HS512!
如果我单击“秘密 base64 编码”,显然签名会更改 jwt.io。现在我用 base64 对密钥“abc”进行编码以获得“YWJj”并将其用作 openssl 的密钥,如下所示
echo -n "pasted data from jwt.io" | \
| openssl dgst -binary -sha512 -hmac YWJj \
| openssl enc -base64 -A;
这不会创建相同的签名,所以我可能误解了这个复选框。它到底是做什么的,我需要如何调用来模拟它?openssl
(我知道 base64 和 base64 urlencode 之间存在差异,但这应该不会对“abc”的编码产生影响。
答:
18赞
jps
9/18/2018
#1
https://jwt.io 上的选项表示您粘贴到输入字段中的密钥是 base64 编码的,因此需要在应用之前对其进行解码。然后,jwt.io 执行此额外步骤以首先解码密钥。secret base64 encoded
jwt.io 确实在这两种情况下都会产生相同的哈希值:
secret
= 'abc' 和 = no 或secret base64 encoded
secret
= 'YWJj' 和 = yes,secret base64 encoded
因此,该部件工作正常并按预期运行。
但是您的 OpenSSL 命令行完全相同,只是密钥不同。OpenSSL 不知道您的编码,并将它们视为不同的密钥,因此会产生不同的结果。
我不知道有任何命令行开关会告诉 OpenSSL 将密钥视为编码密钥。
评论
0赞
Harald
9/19/2018
感谢您的确认。与此同时,我想我找到了我困惑的原因。只有当我输入未编码的密钥但仍然单击“编码”时,目标应用程序才有效。我现在意识到,这意味着我必须将目标应用程序的配置 UI 中的密钥设置为编码密钥。明天需要尝试这个,但那真的很傻:-\
评论