JWT Signature HS256 - 在linux和网站

时间:2018-02-03 11:33:59

标签: linux jwt digital-signature hmac

我正在尝试编写小型Linux实用程序,用于与JWT签名一起使用的开发目的。

问题:来自jwt.io网站的linux秘密和秘密是不同的。 我正在使用https://jwt.io/#debugger-io和HS256的默认数据。

示例:

 # hmac256
 $ echo -n "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9" | hmac256 secret
 > 4c9540f793ab33b13670169bdf444c1eb1c37047f18e861981e14e34587b1e04

 # openssl
 $ echo -n "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9" | openssl dgst -sha256 -hmac secret   
 > (stdin)= 4c9540f793ab33b13670169bdf444c1eb1c37047f18e861981e14e34587b1e04

 # Key from website
 # TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

1 个答案:

答案 0 :(得分:0)

找到答案,哈希实用程序的结果应该是二进制格式,也应该是base64编码。

所以工作命令是:

  • echo -n "{header}.{payload}" | hmac256 --binary secret | base64
  • echo -n "{header}.{payload}" | openssl dgst -sha256 -binary -hmac secret | base64

示例:

$ echo -n "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9" | hmac256 --binary secret | base64
> TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=

$ echo -n "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9" | openssl dgst -sha256 -binary -hmac secret | base64
> TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=