将字符串编码为base-64格式并解码回原始字符串

8

我正在尝试将一些字符串从base-64编码转换回来,但是我无法得到正确的结果。

string text = base64string.... //Here I have a base-64 string.
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
string base64Encoded = Convert.ToBase64String(encodedByte);

if (text == base64Encoded) //If the new encoded string is equal to its original value
    return base64Encoded;

我已经尝试了多种方法,但似乎没有得到正确的结果。我已经尝试过使用System.Text.Encoding.UnicodeSystem.Text.Encoding.UTF8

可能出了什么问题?有没有适当的解决方案?


阅读您的代码后,我发现您正在将一个base64字符串进行编码,然后再将其编码为base64,最后将编码后的字符串与原始字符串进行比较? - Brian
你为什么要从编码形式开始?你可以尝试先从明文进行编码,然后再解码。或者你是想自己实现编码/解码算法吗? - Attila
@Brian - 是的,这就是我正在做的。 - Erik Larsson
2
@Erik,记住,textbase64encoded不匹配,因为base64encodedtext的“乱码”内容,:D - code4life
Erik,我想你现在看到问题了。我认为你想要做的是将原始未编码的字符串传递给Convert.ToBase64String(encodedByte);然后将结果与您的原始编码字符串进行比较,以查看它们是否匹配。 - Brian
@Erik,那不是你正在做的事情;你正在比较未编码text字符串和已编码base64Encoded字符串。显然它们不同;在调试器中查看它们。 - Dour High Arch
4个回答

11
string text = base64string.... //Here I have a base-64 string.
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
string base64Encoded = Convert.ToBase64String(encodedByte);

你正在对字符串进行双重编码。你首先使用base64字符串,获取字节,然后再次进行编码。如果你想进行比较,你需要从原始字符串开始。


我知道这一点。我想要的是将一个base-64字符串编码成另一种格式,然后再次编码回base-64,只是为了查看编码的结果是否丢失了任何数据。我知道这是一个愚蠢的操作,但我仍想这样做。 - Erik Larsson
2
@ErikLarsson:好的,base64已经保证了你不会丢失数据,所以我看不出有什么意义。但是,如果你知道我在告诉你什么...那问题是什么?很明显,当你一遍又一遍地编码一个字符串时,你不会得到相同的结果。从原始字符串开始,进行编码,如果你真的想检查,再进行解码。 - Ed S.

6
如果text是一个base-64字符串,那么你正在倒过来做:
byte[] raw = Convert.FromBase64String(text); // unpack the base-64 to a blob
string s = Encoding.UTF8.GetString(raw); // assume the blob is UTF-8, and 
                                         // decode to a string

这将返回一个字符串。需要注意的是,此方案仅适用于将Unicode文本表示为ASCII格式。如果原始内容就是字符串,则通常不需要对其进行base-64编码。


1

将您需要的任何Base64转换为字节数组,然后使用FromBase64String和ToBase64String进行Base64之间的转换:

Byte[] buffer = Convert.FromBase64String(myBase64String1);
myBase64String2 = Convert.ToBase64String(buffer);

myBase64String1将等于myBase64String2。 您需要使用其他方法将数据类型转换为字节数组,然后反向操作以获取数据类型。 我已经使用此方法将类的内容转换为字节数组,然后转换为Base64字符串并将字符串写入文件系统。 稍后,我通过反转过程将其读回类实例中。


0

你已经正确地编写了编码代码。为了确认base64编码的字符串是否正确,你可以尝试解码它并将解码后的内容与原始内容进行比较:

var decodedBytes = Convert.FromBase64String(base64encoded);
var compareText = System.Text.Encoding.ASCII.GetString(decodedText);

if (text == compareText)
{
    // carry on...
    return base64encoded;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接