类似于Convert.FromBase64String的Tryparse

时间:2011-10-07 11:26:00

标签: .net

Convert.FromBase64String是否有任何tryparse 或者我们只计算角色是否等于64个字符。

我复制加密和解密类,但以下行有错误。我想检查cipherText是否可以无误转换

byte[] bytes = Convert.FromBase64String(cipherText);

2 个答案:

答案 0 :(得分:14)

好吧,你可以先查看字符串。它必须具有正确的字符数,用(str.Length * 6)%8 == 0验证。并且你可以检查每个字符,它必须在集合AZ,az,0-9,+,/和= 。 =字符只能出现在最后。

这很贵,实际上捕获异常实际上更便宜。 .NET没有TryXxx()版本的原因。

答案 1 :(得分:3)

public static class Base64Helper
{
    public static byte[] TryParse(string s)
    {
        if (s == null) throw new ArgumentNullException("s");

        if ((s.Length % 4 == 0) && _rx.IsMatch(s))
        {
            try
            {
                return Convert.FromBase64String(s);
            }
            catch (FormatException)
            {
                // ignore
            }
        }
        return null;
    }

    private static readonly Regex _rx = new Regex(
        @"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=|[A-Za-z0-9+/][AQgw]==)?$",
        RegexOptions.Compiled);
}