Есть ли способ в C # проверить, закодирована ли строка в Base 64, кроме попытки ее преобразовать и увидеть, есть ли ошибка? У меня есть такой код:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Я хочу избежать исключения «Недопустимый символ в строке Base-64», которое возникает, если значение не является допустимой строкой base 64. Я хочу просто проверить и вернуть false вместо обработки исключения, потому что я ожидаю, что иногда это значение не будет строкой с базой 64. Есть ли способ проверить перед использованием функции Convert.FromBase64String?
Спасибо!
Обновление:
спасибо за все ваши ответы. Вот метод расширения, который вы все можете использовать до сих пор, он, кажется, гарантирует, что ваша строка будет передавать Convert.FromBase64String без исключения. .NET, похоже, игнорирует все конечные и конечные пробелы при преобразовании в базу 64, поэтому "1234" является действительным, а также "1234"
public static bool IsBase64String(this string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
}
Для тех, кто интересуется производительностью тестирования по сравнению с перехватом и исключением, в большинстве случаев для этой вещи с базой 64 быстрее проверить, чем перехватить исключение, пока вы не достигнете определенной длины. Чем меньше длина, тем быстрее она
В моем очень ненаучном тестировании: для 10000 итераций для длины символов 100000 - 110000 сначала было в 2,7 раза быстрее протестировать.
На 1000 итераций для символов длиной от 1 до 16 символов всего за 16 000 тестов это было в 10,9 раза быстрее.
Я уверен, что есть момент, когда становится лучше тестировать метод, основанный на исключениях. Я просто не знаю, в какой момент.
\n\fLE16
- ваш метод даст для этого ложное срабатывание. Для всех, кто читает и ищет надежный метод; Я бы порекомендовал перехватить FormatException или использовать подходящее RegEx, см. Stackoverflow.com/questions/475074/… .
@"^[a-zA-Z0-9\+/]*={0,2}$"
=
знака. Если заполнение неверно, будет выдана ошибка, даже если ввод соответствует выражению.