Есть ли способ в С#, чтобы узнать, не закодирована ли строка Base 64, кроме как просто ее конвертировать и посмотреть, есть ли ошибка? У меня есть код такой:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Я хочу исключить исключение "Недопустимый символ в строке Base-64", если это значение недопустимо. Я хочу просто проверить и вернуть false вместо обработки исключения, потому что я ожидаю, что иногда это значение не будет базой 64. Есть ли способ проверить перед использованием функции Convert.FromBase64String?
Спасибо!
Update:
Спасибо за все ваши ответы. Вот метод расширения, который вы все можете использовать до сих пор, кажется, что ваша строка будет передавать 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 итераций для длины символа 100 000 - 110000 вначале это было в 2,7 раза быстрее.
Для 1000 итераций для символов длиной 1 - 16 символов для общей сложности 16 000 тестов это было в 10,9 раза быстрее.
Я уверен, что есть точка, где лучше тестировать метод, основанный на исключении. Я просто не знаю, в какой момент.