当前位置: 首页 > 知识库问答 >
问题:

转换FromBase64String不适用于代码,但适用于在线工具

董阳平
2023-03-14

我正在编写一个 C# 应用程序来解码此字符串:

"--W 3原文3 R hcn Rfd Gl tZ SI 6 I jAi L CJ w cm 9 k dW N 0 X 2 lk I jo iO D Q wM DMz MD气LC J 1 cm wi O iI if Sx 7 InN 0 Y XJ 0 X 3 Rp b WU iO iI 3 OS In by b 2 R 1 Y 3 Rfa WQ iO iI 4 NDA zN jk 2 MS In Vy bCI 6 ii J 9 LH原文3 R hcn Rfd Gl tZ SI 6 Ij gyI iw icH J v ZH Vj dF 9 p Z CI 6 jg 0 M DAz M DI wii wi dX Js I jo i In 0 sey J zd GF yd F 90 aW 1 lI jo iMT A 5 ii wi cH J v ZH Vj dF 9 p Z CI 6 ii is In Vy bCI 6 Imh 0 dH Bz Oi 8 vY m xv Zy 5 sY XJ laW 5 lZH V zaG 9

当我将其复制/粘贴到此在线工具中时,它可以工作:https://www.base64decode.org

但当我使用Convert.FromBase64String(str)时,它会引发异常:

系统。格式异常:输入不是有效的Base-64字符串,因为它包含一个非基本64字符、两个以上的填充字符或填充字符中的非法字符。

为什么?

共有3个答案

水飞掣
2023-03-14

您必须像上面提到的那样从字符串中删除 -- 前缀。我想补充一点,当我使用 Convert.FromBase64String(str) 时,我的 base64 字符串中有 data:image/jpeg;base64,前缀时,我遇到了同样的错误。

正在删除< code >数据:image/JPEG;base64,从字符串工作。

颜乐
2023-03-14

您的代码不是有效的Base64字符串。字符串开头的-字符无效。你可以这样转换。

using System;
using System.Text;

var decodedString = "--W3sic3RhcnRfdGltZSI6IjAiLCJwcm9kdWN0X2lkIjoiODQwMDMzMDQiLCJ1cmwiOiIifSx7InN0YXJ0X3RpbWUiOiI3OSIsInByb2R1Y3RfaWQiOiI4NDAzNjk2MSIsInVybCI6IiJ9LHsic3RhcnRfdGltZSI6IjgyIiwicHJvZHVjdF9pZCI6Ijg0MDAzMDIwIiwidXJsIjoiIn0seyJzdGFydF90aW1lIjoiMTA5IiwicHJvZHVjdF9pZCI6IiIsInVybCI6Imh0dHBzOi8vYmxvZy5sYXJlaW5lZHVzaG9wcGluZy5jYS8yMDE3LzAxL3RyYW5zZm9ybWVyLXNlcy12aWV1eC1nYW50cy1kZS1jdWlyLWVuLTUtbWludXRlcy8ifV0="
    .Replace("-", "");
var bytes = Convert.FromBase64String(decodedString);
var encodedString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(encodedString);
邹宣
2023-03-14

URL 解码将从 base64 字符串中删除,使其无效。如果解码“a ==”,结果将是字符“k”。如果使用 URL 解码来解码“a ==”,则 URL 解码会将字符串转换为“a ==”,并且尝试解码时会出现异常。

简而言之,。Net Framework使用Base64编码的变体,它不允许无效字符,而相关站点使用的PHP正在使用另一个变体,它允许无效字符但丢弃它们。

Base64编码将三个八位字节转换为四个编码字符。Base64编码中64个字符中的前62个的有效字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

有几个变体允许字符62和63使用不同的字符。与最常见的变体一样,使用C#时,完整的字符集为:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

https://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110).aspx

从零开始按升序排列的base-64数字是大写字符“A”到“Z”,小写字符“A”到“Z”,数字“0”到“9”,以及符号“”和“/”。无值字符“=”用于尾随填充。

这种变体是RFC 3548或RFC 4648的标准“base64”编码,除非另有说明,否则禁止无效值。

PHP对MIME使用Base64传输编码(RFC 2045),它允许无效字符,但会丢弃它们。

在所有其他Base64变体中,禁止使用无效字符。

如果最初的Base64实际上应该包含< code>-字符,那么它使用的是不同的变体。

见:https://en.wikipedia.org/wiki/Base64#Variants_summary_table

 类似资料:
  • 因此,下面的代码适用于一个活动,但当我使用onCreateView将其添加到一个片段中时,应用程序就会崩溃 Fragment公共类步骤扩展Fragment{ 12-13 15:17:15.062 984-984/com.stephenh.daytrack.daytrack.daytrackstephenh E/AndroidRuntime:致命异常:主进程:com.stephenh.daytrac

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P

  • 我一直在使用声纳3.2 同样的配置,当我升级到SonarQube 4.4时 声纳项目属性: 请帮助整理这些例外 问候, KP