jwt.io上的“秘密base64编码”是什么意思,我将如何使用“ openssl dgst”对其进行仿真

时间:2018-09-18 13:04:51

标签: openssl jwt

我尝试从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 url​​encode之间存在区别,但这对“ abc”的编码应该没有区别。)

1 个答案:

答案 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将密钥视为编码密钥。