2013-05-27 42 views
3

当我米尝试使用下面的代码,以数值1为byte []转换:如何解决“base64无效字符”错误?

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

Ι收到一个错误的字符串内容无效基64个字符...

有什么不对?

谢谢!

+2

您需要先将其从URL编码转换回来。 HttpUtility.UrlDecode()方法。 –

回答

1

我认为问题是与字符%。它不是以base64串

允许根据MSDN

public static byte[] FromBase64String( string s) 

S由的BASE64数字,空格字符,和尾随 填充字符。从零开始 的升序的基数64位是大写字符“A”到“Z”,小写字母“a”到 “z”,数字“0”到“9”以及符号“+”和“/”。

0

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

+0

字符串中没有'#'字符;) –

+0

这当然是错误的,做了更新;) – anderhil

6

Convert.FromBase64String

s的由底座64个数字,空格字符,和尾随 填充字符。 从零开始 的大写字母'A'到'Z',小写字母'a'到 'z',数字'0'到'9'以及符号'+'和'/'

%不允许在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/
1

退房的Base64编码索引表字符串包含无效字符。在这种情况下,%标志。

如果您将unescape %2B改为“+”而%3D改为“=”,则字符串将被接受。

1

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

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

4rdHFh+HYoS8oLdVvbUzEVqB8Lvm7kSPnuwF0AAABYQ= 
2

我有同样的问题,但没有一个答案帮助我!所以我在这里问我的问题: How to encrypt strings that may have non-base 64 characters 和@luke-park解决我的问题。(所有学分都归他所有)长篇故事短片是:

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

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

我希望这种帮助别人的人有同样的问题。

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

相关问题