【问题标题】:Convert.FromBase64string is throwing invalid Base-64 exception when decoding an encoded JSON string from a jwt payload with integer values从具有整数值的 jwt 有效负载解码编码的 JSON 字符串时,Convert.FromBase64string 引发无效的 Base-64 异常
【发布时间】:2019-01-16 11:25:23
【问题描述】:

我正在编写一个函数来手动验证并获取 jwt access_token 的标头和有效负载对 我正在使用https://jwt.io/ 提供的示例令牌进行测试 此时我的代码非常简单

string[] tokenSegments = Token.Split('.');
string tokenHeaders = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[0]));
string tokenPayload = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[1]));

当它到达 tokenPayloadLine 时,我得到以下异常

System.FormatException: 输入不是有效的 Base-64 字符串,因为它包含 > 非 base 64 字符、两个以上的填充字符或填充字符中的非法 > 字符。 在 System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) 在 System.Convert.FromBase64String(String s)

并且在这个级别抛出异常

Convert.FromBase64String(tokenSegments[1])

请注意,我可以毫无例外地获取标题值

我已经尝试并编辑了令牌以更改有效负载中可用的整数值以使其成为字符串,然后我成功获取有效负载

只是比较 抛出异常的编码字符串是

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

而工作正常的是

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoiMTUxNjIzOTAyMiJ9

如果你对它们都进行解码,你会发现唯一的区别是导致异常的整数值

我做错了吗?这不是转换函数的预期用途吗?任何想法或建议都会有所帮助,请注意我需要手动执行此操作,因为我完全了解在线可用的 jwt 库。

【问题讨论】:

标签: c# .net


【解决方案1】:

Base64 需要在末尾添加 =,并不是每个工具都会添加这些。

string  s = // some base64 witout padding;
s = s.PadRight(s.Length + (s.Length * 3) % 4, '=');  // add padding
var data = Convert.FromBase64String(s);

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 1970-01-01
    • 2017-08-21
    • 2012-10-23
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多