SHA256 哈希的 Base64 编码

信息安全 哈希 sha256 jwt
2021-08-10 10:53:10

我目前正在阅读 JWT 并编写了一些东西来创建它们。当我创建我的 JWT 时,我注意到我的签名没有被正确编码。

例如,给定哈希

9B2317C2C941A179130D0D28961AB542C88745658BE328F557422EA0AF8F60E8

我的代码产生

OUIyMzE3QzJDOTQxQTE3OTEzMEQwRDI4OTYxQUI1NDJDODg3NDU2NThCRTMyOEY1NTc0MjJFQTBBRjhGNjBFOA==

我期望得到的是

myMXwslBoXkTDQ0olhq1QsiHRWWL4yj1V0IuoK+PYOg=

为什么编码的哈希值如此不同,我错过了什么?

2个回答

您正在从十六进制编码(或 base16,如果您愿意)转换为 base64。因此,您正在对 ASCII 字符9(57)、B(66) 和2(50) 进行 base64 编码,从而为您提供OUIy.

你应该做的是 base64 编码原始字节所以你应该编码0x9B(155) 和0x23(35) 给你myM.

应该这样做;

echo 9B2317C2C941A179130D0D28961AB542C88745658BE328F557422EA0AF8F60E8 | xxd -r -p | base64

输出:

myMXwslBoXkTDQ0olhq1QsiHRWWL4yj1V0IuoK+PYOg=