我尝试从jwt.io和openssl
获得相同的输出。只要我不标记“秘密base64编码”,我就可以在签名之前参与其中,并通过
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”的编码应该没有区别。)
答案 0 :(得分:2)
https://jwt.io上的选项secret base64 encoded
意味着您粘贴到输入字段中的秘密是base64编码的,因此在应用之前需要对其进行解码。然后jwt.io采取了这一额外步骤,首先对机密进行解码。
jwt.io在两种情况下确实产生相同的哈希值:
secret
='abc'和secret base64 encoded
=否secret
='YWJj'和secret base64 encoded
=是,,以便该部分正常工作并表现出预期的效果。
但是您的OpenSSL命令行完全相同,只是键不同。 OpenSSL不了解您的编码,因此会将它们视为不同的密钥,因此会产生不同的结果。
我不知道有任何命令行开关会告诉OpenSSL将密钥视为编码密钥。