Convert.FromBase64String
是否有任何tryparse
或者我们只计算角色是否等于64个字符。
我复制加密和解密类,但以下行有错误。我想检查cipherText
是否可以无误转换
byte[] bytes = Convert.FromBase64String(cipherText);
答案 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);
}