如何解决“base64无效字符”错误?

时间:2013-05-27 13:12:15

标签: c# character-encoding base64

当我尝试使用以下代码将value1转换为byte []时:

string value1 = "4rdHFh%2BHYoS8oLdVvbUzEVqB8Lvm7kSPnuwF0AAABYQ%3D";
byte[] value2 = Convert.FromBase64String(value1);

Ι收到错误,字符串内容无效base-64字符...

怎么了?

谢谢!

6 个答案:

答案 0 :(得分:8)

来自Convert.FromBase64String

  

s由64位基数,空白字符和尾部组成   填充字符。 基数为64位,从零开始按升序排列   是大写字母'A'到'Z',小写字符'a'到   'z',数字'0'到'9',符号'+'和'/'

base64编码中不允许

%

Wikipedia

查看 Base64索引表
Value   Char
0   A   16  Q   32  g   48  w
1   B   17  R   33  h   49  x
2   C   18  S   34  i   50  y
3   D   19  T   35  j   51  z
4   E   20  U   36  k   52  0
5   F   21  V   37  l   53  1
6   G   22  W   38  m   54  2
7   H   23  X   39  n   55  3
8   I   24  Y   40  o   56  4
9   J   25  Z   41  p   57  5
10  K   26  a   42  q   58  6
11  L   27  b   43  r   59  7
12  M   28  c   44  s   60  8
13  N   29  d   45  t   61  9
14  O   30  e   46  u   62  +
15  P   31  f   47  v   63  /

答案 1 :(得分:2)

我认为问题出现在角色%上。在base64字符串中不允许使用

根据MSDN

public static byte[] FromBase64String(  string s)
  

s由base-64数字,空格字符和尾部组成   填充字符。基数为64的数字,从零开始按升序排列   是大写字母“A”到“Z”,小写字符“a”到   “z”,数字“0”至“9”,符号“+”和“/”。

答案 2 :(得分:2)

我遇到了同样的问题,但这些答案都没有帮助我!所以我在这里问我的问题: How to encrypt strings that may have non-base 64 characters 并且@ luke-park解决了我的问题。(所有信用都归他所有)长话短说:

我们必须将bsae64数据转换为字节数组,然后将其转换为base64。现在我们的数据是有效的byte[] data = Encoding.UTF8.GetBytes(inputString); string b64 = Convert.ToBase64String(data); 格式,可以加密它:

VM

我希望这能帮助其他人解决同样的问题。

PS:我的帖子中有两个加密类,非常适合用于加密/解密字符串。

答案 3 :(得分:1)

该字符串包含无效字符。在这种情况下,%符号。

如果您将%2B转换为“+”而%3D转换为“=”,则会接受该字符串。

答案 4 :(得分:1)

%2B是编码的+符号URL %3D是=编码的符号URL。

您的输入字符串实际上是。

4rdHFh+HYoS8oLdVvbUzEVqB8Lvm7kSPnuwF0AAABYQ=

答案 5 :(得分:0)

这是因为字符串中的'%'字符。它不允许在base64中使用。你从哪里拿这个字符串?