我想以base64格式解密字符串。我有一些加密格式的数据和一些普通文本的数据。首先,我需要检查字符串是否加密。如果是加密格式,则解密字符串。如果它在普通文本中,则显示文本。 这是我的代码: -
public static string DecryptConnectionString(string connectionString)
{
string result = "";
bool app = false;
app = IsBase64String(connectionString);
if (app == true)
{
Byte[] b = Convert.FromBase64String(connectionString);
string decryptedConnectionString = System.Text.ASCIIEncoding.ASCII.GetString(b);
result = decryptedConnectionString;
}
else if (app == false)
{
result = connectionString;
}
return result;
}
public static bool IsBase64String(string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$", RegexOptions.None);
}
这段代码不能正常工作,但有时却不行。如果我写“测试”,那么它显示为“??”。任何人都可以帮忙吗?
答案 0 :(得分:0)
如果无法解码,尝试Base64解码并捕获异常怎么样?
string DecryptConnectionString(string connectionString)
{
string result;
try
{
Byte[] b = Convert.FromBase64String(connectionString);
result = decrypt(b);
}
catch (FormatException e)
{
result = connectionString;
}
return result;
}
答案 1 :(得分:0)
问题在于编码。 在上面的示例中,您使用ASCII。通常在使用.net变量时,你有UTF-8字符串。 为此,我建议您阅读Joel about the basics of unicode
您必须始终使用创建字符串的编码。 当您将字节数据转换为字符串并且您没有正确的编码时,无法映射的字符将返回意外的字符。 (喜欢?)