gpt4 book ai didi

c# - 从具有整数值的 jwt 有效负载解码编码的 JSON 字符串时,Convert.FromBase64string 抛出无效的 Base-64 异常

转载 作者:行者123 更新时间:2023-11-30 20:15:30 26 4
gpt4 key购买 nike

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

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: The input is not a valid Base-64 string as it contains >a non-base 64 character, more than two padding characters, or an illegal >character among the padding characters. at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) at System.Convert.FromBase64String(String s)

并且在这个级别抛出异常

Convert.FromBase64String(tokenSegments[1])

请注意,我可以毫无异常(exception)地获取 header 值

我已经尝试并编辑了 token 以更改有效载荷中可用的整数值,使其成为一个字符串,然后我成功地获得了有效载荷

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

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

并且工作正常的是

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoiMTUxNjIzOTAyMiJ9

如果你解码它们两个你会发现唯一的区别是导致异常的整数值

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

最佳答案

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

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

关于c# - 从具有整数值的 jwt 有效负载解码编码的 JSON 字符串时,Convert.FromBase64string 抛出无效的 Base-64 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54216047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com