C # 'da bir dizenin Base 64 kodlu olup olmadığını görmenin, onu dönüştürmeye çalışmak ve bir hata olup olmadığını görmek dışında bir yolu var mı? Bunun gibi kod kodum var:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Değer geçerli bir temel 64 dizesi değilse meydana gelen "Base-64 dizesinde geçersiz karakter" özel durumundan kaçınmak istiyorum. Bir istisnayı ele almak yerine sadece kontrol edip yanlış döndürmek istiyorum çünkü bazen bu değerin temel 64 dizesi olmayacağını umuyorum. Convert.FromBase64String işlevini kullanmadan önce kontrol etmenin bir yolu var mı?
Teşekkürler!
Güncelleme:
Tüm yanıtlarınız için teşekkürler. İşte şimdiye kadar kullanabileceğiniz bir uzantı yöntemi, dizenizin istisnasız Convert.FromBase64String'i geçeceğinden emin gibi görünüyor. Görünüşe göre .NET, 64 tabanına dönüştürürken tüm son ve son boşlukları yok sayıyor, bu nedenle "1234" geçerli ve "1234" de öyle.
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);
}
Test performansına karşı yakalama ve istisnayı merak edenler için, çoğu durumda bu temel 64 şey için kontrol etmek, belirli bir uzunluğa ulaşana kadar istisnayı yakalamaktan daha hızlıdır. Uzunluk ne kadar küçükse o kadar hızlıdır
Bilimsel olmayan testimde: 100.000 - 110000 karakter uzunluğu için 10000 yineleme için ilk önce test etmek 2.7 kat daha hızlıydı.
Toplam 16.000 test için 1-16 karakter uzunluğundaki karakterlerin 1000 yinelemesinde 10.9 kat daha hızlıydı.
İstisna tabanlı yöntemle test etmenin daha iyi hale geldiği bir nokta olduğundan eminim. Bunun hangi noktada olduğunu bilmiyorum.
\n\fLE16
- yönteminiz bunun için yanlış bir pozitif sonuç verecektir. Kusursuz bir yöntem okuyan ve arayan herkes için; FormatException'ı yakalamanızı veya spesifikasyona uygun bir RegEx kullanmanızı tavsiye ederim, bkz. Stackoverflow.com/questions/475074/… .
@"^[a-zA-Z0-9\+/]*={0,2}$"
=
işareti kullanarak dolgu gerektirir . Dolgu yanlışsa, girdi bir ifadeyle eşleşse bile hata verecektir.