首页 > 解决方案 > 如何在 C 中解密 base64 编码的字符串

问题描述

这几天我一直在为此头疼,我就是想不通。我有一个字符串,它是我在 JWT 中获得的用于身份验证等的令牌。

令牌是这样创建的:

token = base64_urlsafe_encode(DATA)
DATA = IV + CIPHER_TAG + CIPHER_TEXT
IV = 16 bytes - initialization vector
CIPHER_TAG = 16 bytes - cipher tag
CIPHERTEXT = remaining bytes - encrypted(CREDENTIAL)
CREDENTIAL = <username>:<password>

现在,我可以对传入的 jwt 进行 decode-base64 解码,没问题。但是我的令牌是这样出现的:(出于安全原因更改了一些字符,我只将字母数字更改为 0)

token" => "00_0000000000000000000000000000000000-00_000000000000000000000000_0000_00000000000000000000000_0000000000000000000000000000000==",

我无法将 64 解码为二进制,因为它在“_”字符和“-”以及任何不是 base64 的内容上都失败了。

谁能帮我弄清楚如何做到这一点?他们怎么说:token = base64_urlsafe_encode(DATA)如果令牌包含无效(不是 base64)字符?

标签: cbinaryjwtbase64

解决方案


JWT 使用 Base64url 编码(与普通的 Base64 有点不同)。区别在于:

  • Base64url 替换+-(减号)
  • Base64url 替换/_(下划线)
  • Base64url 不需要填充字符=

推荐阅读