10

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

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

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

怎么了?

谢谢!

4

6 回答 6

13

Convert.FromBase64String

s 由基本 64 位数字、空白字符和尾随填充字符组成。从零开始按升序排列的 64 位基数是大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/” .

%base64编码中不允许。

查看Base64索引表Wikipedia

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  /
于 2013-05-27T13:17:37.107 回答
7

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

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

4rdHFh+HYoS8oLdVvbUzEVqB8Lvm7kSPnuwF0AAABYQ=
于 2013-05-27T13:18:18.547 回答
7

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

我们必须将我们的inputString数据转换为字节数组,然后将其转换为 bsae64. 现在我们的数据是有效base64格式并且可以加密它:

byte[] data = Encoding.UTF8.GetBytes(inputString);
string b64 = Convert.ToBase64String(data);

我希望这可以帮助其他有同样问题的人。

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

于 2016-11-04T09:09:25.310 回答
3

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

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

于 2013-05-27T13:18:07.950 回答
2

我认为问题出在 character%上。在 base64 字符串中是不允许的

根据MSDN

public static byte[] FromBase64String(  string s)

s 由 base-64 数字、空白字符和尾随填充字符组成。base-64位从0升序为大写字母“A”到“Z”,小写字母“a”到“z”,数字“0”到“9”,符号“+”和“/” ”。

于 2013-05-27T13:14:24.307 回答
0

这是因为字符串中有 '%' 字符。在 base64 中是不允许的。你从哪里得到这个字符串?

于 2013-05-27T13:16:09.103 回答