📅  最后修改于: 2023-12-03 15:28:58.826000             🧑  作者: Mango
在C#中,我们经常需要将二进制数据编码成base64字符串或将base64字符串解码为二进制数据。但是,当我们接收到一个base64字符串时,我们如何验证它是否是一个合法的base64字符串呢?
在验证之前,我们需要了解base64字符串的格式。base64字符串由64个字符组成,分别是26个大写字母、26个小写字母、10个数字和两个符号"+"和"="。base64字符串的长度必须是4的倍数,最后可能会有1到2个等号填充。
因此,我们可以编写一个简单的正则表达式来验证是否有非法字符或长度不合法:
bool isValidBase64String = System.Text.RegularExpressions.Regex.IsMatch(base64String, @"^[a-zA-Z0-9\+/]*={0,2}$") && base64String.Length % 4 == 0;
正则表达式中的"+"和"="需要进行转义,所以我们需要在它们前面加上反斜杠""。
除了验证base64字符串的格式外,我们还需要验证是否可以将其解码为有效的二进制数据。可以使用System.Convert
类的FromBase64String
方法进行解码,如果解码成功,则说明它是一个合法的base64字符串。
try
{
byte[] bytes = System.Convert.FromBase64String(base64String);
isValidBase64String = true;
}
catch (System.FormatException)
{
isValidBase64String = false;
}
通过上述方式,我们可以验证是否为合法的base64字符串。在解码之前验证可以防止解码异常和潜在的安全问题。同时,我们还可以将验证封装成一个通用的方法,方便日后使用。
public static bool IsValidBase64String(string base64String)
{
bool isValid = System.Text.RegularExpressions.Regex.IsMatch(base64String, @"^[a-zA-Z0-9\+/]*={0,2}$") && base64String.Length % 4 == 0;
if (isValid)
{
try
{
byte[] bytes = System.Convert.FromBase64String(base64String);
}
catch (System.FormatException)
{
isValid = false;
}
}
return isValid;
}
这个方法会返回一个布尔值,表明base64字符串是否合法。