C#中System.Convert.FromBase64String解码Base64字符串报错的解决方法
解决Base64解码报错的方案
你的问题出在目标字符串是Base64URL编码(JWT标准使用的编码格式),而非.NET System.Convert.FromBase64String 要求的标准Base64格式,两者核心差异如下:
- Base64URL用
-和_替代了标准Base64的+和/ - Base64URL通常省略末尾的填充字符
=
要正常解码,需先将Base64URL转换为标准Base64格式,再执行解码操作。修改后的代码如下:
var test = "eyJhbGciOiJSUzI1NiIsImtpZCI6IlRlc3RDZXJ0IiwidHlwIjoiYXQrand0In0"; // 1. 将Base64URL特殊字符替换为标准Base64对应字符 var base64String = test.Replace('-', '+').Replace('_', '/'); // 2. 补充填充字符=,确保字符串长度为4的整数倍 base64String = base64String.PadRight(base64String.Length + (4 - base64String.Length % 4) % 4, '='); // 3. 执行标准Base64解码 var base64EncodedBytes = System.Convert.FromBase64String(base64String); var hidenString = System.Text.Encoding.UTF8.GetString(base64EncodedBytes); // 最终输出:{"alg":"RS256","kid":"TestCert","typ":"at+jwt"}
关键步骤说明
- 字符替换:修正两种编码的字符映射差异,让字符串符合标准Base64的字符范围要求。
- 补充填充:标准Base64强制要求长度为4的整数倍,通过
PadRight计算并补充缺失的=,避免因长度不合法触发解码报错。
内容的提问来源于stack exchange,提问作者Iria
相关产品推荐
相关产品推荐

