Кодирование строк в и из base-64 - PullRequest
7 голосов
/ 26 марта 2012

Я пытаюсь закодировать некоторые строки взад-вперед из строки 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.Unicode и System.Text.Encoding.UTF8

В чем может быть проблема? У кого-нибудь есть правильное решение?

Ответы [ 4 ]

9 голосов
/ 26 марта 2012
string text = base64string.... //Here I have a base-64 string.
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
string base64Encoded = Convert.ToBase64String(encodedByte);

Вы дважды кодируете строку. Вы начинаете со строки base64, получаете байты, а затем кодируете ее снова . Если вы хотите сравнить, вам нужно начать с оригинальной строки.

6 голосов
/ 26 марта 2012

Если 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

, который даст вам его как string. Обратите внимание, что этот сценарий полезен только для представления текста в кодировке Юникод в формате ascii. Обычно вы не кодировали бы base-64, если исходное содержимое string.

1 голос
/ 27 марта 2012

Преобразуйте все, что вам нужно в Base64, в массив байтов, затем используйте FromBase64String и ToBase64String для преобразования в Base64 и из него:

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

myBase64String1 будет равно myBase64String2.Вам нужно будет использовать другие методы, чтобы получить ваш тип данных в массив байтов, и наоборот, чтобы вернуть ваш тип данных.Я использовал это, чтобы преобразовать содержимое класса в байтовый массив, а затем в строку Base64 и записать строку в файловую систему.Позже я прочитал его обратно в экземпляр класса, перевернув процесс.

0 голосов
/ 26 марта 2012

Код кодировки выложен правильно. Чтобы подтвердить правильность строки в кодировке base64, вы можете попробовать ее декодировать и сравнить декодированное содержимое с оригиналом:

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

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