Как убедиться, что массив байтов закодирован Base64? - PullRequest
0 голосов
/ 06 января 2012

У меня есть метод, как показано ниже:

public void AddAttachment(byte[] attachment)
{
// how to make sure that the attachemnt is encoded by Base64?
}

как убедиться, что метод AddAttachment принимает массив байтов, закодированный с Base64?

Например, ниже приведен верный ввод перед отправкой этому методу:

string attachmentInString = "Hello test";
byte[] attachmentInBytes = System.Convert.FromBase64String(attachmentInString);

но если attachmentInBytes был закодирован с использованием ASCII или т. Д., Метод AddAttachement должен выдать исключение.

Как этого добиться?

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 января 2012

По вашему вопросу я нахожу, что вы что-то неправильно поняли, надеюсь, это поможет. Convert.FromBase64String принимает строку (которая всегда похожа на ALJWKA==) и выводит byte[], тогда как Convert.ToBase64String противоположна.Поэтому ваш код:

string attachmentInString = "Hello test";
byte[] attachmentInBytes = System.Convert.FromBase64String(attachmentInString);

сгенерирует исключение, потому что «Hello test» не является допустимой строкой base64.См. Другой метод

public void AddAttachment(byte[] attachment)

аргумент - byte[], поэтому в этом методе вы максимально конвертируете его в строку типа base64.Вы не можете сказать, является ли byte[] допустимой строкой base64 или нет.Вы можете сделать это только для строки:

public void AddAttachment(string attachment) //well I know it looks strange
{
   byte[] bytes = null;
   try
   {
       bytes = Convert.FromBase64String(attachment);
   }
   catch
   {
       //invalid string format
   }
}
0 голосов
/ 06 января 2012

Base64 - это способ представления потока байтов в виде строки.Если вы хотите, чтобы вложение было строкой base64, измените подпись на public void AddAttachment(string attachment)

Затем декодируйте Base64, используя byte[] data = Convert.FromBase64String(attachment)

Если вы хотите закодировать вложение в base64:

public void AddAttachment(byte[] attachment) {
   string base64 = Convert.ToBase64String(attachment)
   ...
}
...