Có cách nào trong C # để xem một chuỗi có được mã hóa Base 64 không ngoài việc cố gắng chuyển đổi nó và xem có lỗi không? Tôi có mã mã như thế này:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
Tôi muốn tránh ngoại lệ "Ký tự không hợp lệ trong chuỗi Base-64" xảy ra nếu giá trị không phải là chuỗi 64 cơ sở hợp lệ. Tôi muốn chỉ kiểm tra và trả về false thay vì xử lý một ngoại lệ vì tôi hy vọng rằng đôi khi giá trị này sẽ không phải là một chuỗi 64 cơ sở. Có cách nào để kiểm tra trước khi sử dụng hàm Convert.FromBase64String không?
Cảm ơn!
Cập nhật:
Cảm ơn tất cả các câu trả lời của bạn. Đây là một phương thức mở rộng mà tất cả bạn có thể sử dụng cho đến nay dường như để đảm bảo chuỗi của bạn sẽ vượt qua Convert.FromBase64String mà không có ngoại lệ. .NET dường như bỏ qua tất cả các dấu cách và dấu cách kết thúc khi chuyển đổi sang cơ sở 64 nên "1234" là hợp lệ và "1234" cũng vậy
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);
}
Đối với những người thắc mắc về hiệu suất của kiểm tra so với bắt và ngoại lệ, trong hầu hết các trường hợp đối với cơ sở 64 này, việc kiểm tra sẽ nhanh hơn so với bắt ngoại lệ cho đến khi bạn đạt đến một độ dài nhất định. Chiều dài càng nhỏ càng nhanh
Trong thử nghiệm rất không khoa học của tôi: Trong 10000 lần lặp cho độ dài ký tự 100.000 - 110000, nó nhanh hơn 2,7 lần để thử nghiệm đầu tiên.
Đối với 1000 lần lặp cho các ký tự có độ dài 1 - 16 ký tự cho tổng số 16.000 bài kiểm tra, nó nhanh hơn 10,9 lần.
Tôi chắc chắn có một điểm mà nó trở nên tốt hơn để kiểm tra bằng phương pháp dựa trên ngoại lệ. Tôi chỉ không biết đó là điểm gì.
\n\fLE16
- phương pháp của bạn sẽ mang lại kết quả dương tính giả cho điều này. Đối với bất cứ ai đọc và tìm kiếm một phương pháp hoàn hảo; Tôi khuyên bạn nên bắt FormatException hoặc sử dụng RegEx phù hợp với thông số kỹ thuật, xem stackoverflow.com/questions/475074/ .
@"^[a-zA-Z0-9\+/]*={0,2}$"
=
dấu. Nếu phần đệm bị sai, nó sẽ báo lỗi mặc dù đầu vào khớp với biểu thức.