在C#中解码Base64(无论是否加密字符串)

时间:2012-01-02 06:15:38

标签: c#-4.0

我想以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);

}

这段代码不能正常工作,但有时却不行。如果我写“测试”,那么它显示为“??”。任何人都可以帮忙吗?

2 个答案:

答案 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

您必须始终使用创建字符串的编码。 当您将字节数据转换为字符串并且您没有正确的编码时,无法映射的字符将返回意外的字符。 (喜欢?)