Est-il possible en C# pour voir si une chaîne est codé en Base 64 autres que juste essayer de le convertir et de voir si il y a une erreur? J'ai le code comme ceci:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Je veux éviter le "caractère Invalide dans le Base-64 string" exception qui se produit si la valeur n'est pas valide en base 64 de la chaîne. Je veux juste vérifier et retourner false au lieu de traiter une exception parce que je suppose que, parfois, cette valeur ne va pas être une base de 64 chaîne. Est-il possible de vérifier avant d'utiliser le Convertir.FromBase64String fonction?
Merci!
Mise à jour:
Merci pour toutes vos réponses. Ici est une extension de la méthode, vous pouvez tous les utiliser jusqu'à présent, il semble assurez-vous que votre chaîne ne passe Convertir.FromBase64String sans exception. .NET semble tout ignorer de fuite et de fin des espaces lors de la conversion en base 64 donc "1234" est valide et donc est " 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);
}
Pour ceux qui s'interrogent sur la performance des tests vs attraper une exception, dans la plupart des cas pour cette base 64 chose, c'est plus rapide pour vérifier que d'attraper l'exception jusqu'à ce que vous atteindre une certaine longueur. Plus la longueur de la plus rapide, il est
Dans ma très scientifique, les essais: Pour 10000 itérations pour la longueur de caractère de 100 000 110000 il était 2,7 fois plus rapide à tester d'abord.
Pour 1000 itérations pour les caractères de longueur 1 - 16 caractères pour un total de 16 000 tests qu'il était de 10,9 fois plus rapide.
Je suis sûr qu'il ya un point où il devient de plus en plus à test, à l'exception base de la méthode. Je ne sais pas à quelle point c'est tout.