Apakah ada cara di C # untuk melihat apakah sebuah string dikodekan Base 64 selain hanya mencoba mengubahnya dan melihat apakah ada kesalahan? Saya memiliki kode kode seperti ini:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Saya ingin menghindari pengecualian "Karakter tidak valid dalam string Base-64" yang terjadi jika nilainya bukan string base 64 yang valid. Saya hanya ingin memeriksa dan mengembalikan false daripada menangani pengecualian karena saya berharap terkadang nilai ini tidak akan menjadi string basis 64. Apakah ada cara untuk memeriksa sebelum menggunakan fungsi Convert.FromBase64String?
Terima kasih!
Pembaruan:
Terima kasih atas semua jawaban Anda. Berikut adalah metode ekstensi yang dapat Anda gunakan sejauh ini untuk memastikan string Anda akan melewati Convert.FromBase64String tanpa pengecualian. .NET tampaknya mengabaikan semua spasi tambahan dan akhir saat mengonversi ke basis 64 sehingga "1234" valid dan begitu juga "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);
}
Bagi mereka yang bertanya-tanya tentang kinerja pengujian vs penangkapan dan pengecualian, dalam banyak kasus untuk 64 basis ini lebih cepat untuk memeriksa daripada menangkap pengecualian sampai Anda mencapai panjang tertentu. Semakin kecil panjangnya, semakin cepat
Dalam pengujian saya yang sangat tidak ilmiah: Untuk 10.000 iterasi untuk panjang karakter 100.000 - 110000, itu 2,7 kali lebih cepat untuk diuji terlebih dahulu.
Untuk 1000 iterasi untuk panjang karakter 1 - 16 karakter dengan total 16.000 tes, itu 10,9 kali lebih cepat.
Saya yakin ada titik di mana akan lebih baik untuk menguji dengan metode berbasis pengecualian. Saya hanya tidak tahu pada poin apa itu.
\n\fLE16
- metode Anda akan menghasilkan positif palsu untuk ini. Untuk siapa saja yang membaca dan mencari metode yang sangat mudah; Saya akan merekomendasikan untuk menangkap FormatException atau menggunakan RegEx yang sesuai dengan spesifikasi, lihat stackoverflow.com/questions/475074/… .
@"^[a-zA-Z0-9\+/]*={0,2}$"
=
tanda. Jika padding salah, akan memberikan error meskipun inputnya cocok dengan ekspresi.