【发布时间】:2022-01-05 18:31:52
【问题描述】:
这是我的字符串,我尝试将其从 base64 转换为人类可读的字符串:
eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9kYXRlb2ZiaXJ0aCI6IjIvMjUvMTk5MSAxMjowMDowMCBBTSIsIm5iZiI6MTY0MTQwNjk2MCwiZXhwIjoxNjQxNDEwNTYwLCJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo3MDAwLyIsImF1ZCI6Imh0dHBzOi8vbG9jYWxob3N0OjcwMDAvIn0
它适用于从base64转换的在线网站,例如this site
在 c# .net6 上我试试这个代码:
var bytes = Convert.FromBase64String(base64payload);
base64payload 是上面那个字符串。 为什么我在 c# dotnet 6 上会出现此错误?
"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."
据我所知,(a-z A-Z 0-9 / +) 是有效的,我的眼睛在这个字符串中没有看到任何错误的 base64 字符 + 它适用于其他地方。
【问题讨论】:
-
您收到错误是因为它无效。长度不能被 4 整除。它缺少一个填充字符。是什么产生的?
-
我尝试手动拆分令牌中间声明部分。 var accessToken = context.AccessToken; var base64payload = accessToken.Split('.')[1];哪个访问令牌是实际令牌。
-
您所链接的网站在解码时冒犯了。它忽略了您没有正确填充的事实。对于严格正确的 Base64 编码,它需要填充。无论产生什么,它都在去除填充物。您和生产者之间有一个隐含的约定,即假定填充,但这需要您先添加它,然后才能将它与不符合该约定的东西一起使用,例如严格的解码器喜欢
Convert.FromBase64String()。 -
字符串是 JWT 的有效负载部分。 JWT 使用 Base64Url 编码。 Base64Url 通常在没有填充的情况下工作,许多 base64 解码器对填充非常宽容。众所周知,.NET Base64 解码器是严格的。
-
嗯,不,以前版本的 .NET 在这方面的表现并没有什么不同。
Convert.FromBase64String一直对填充很严格。还有一些不同。
标签: c# base64 character converters .net-6.0