Декодировать Base64 в C # (либо строка, зашифрованная или нет) - PullRequest
0 голосов
/ 02 января 2012

Я хочу расшифровать строку в формате 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 голосов
/ 02 января 2012

Проблема в кодировке.В приведенном выше примере вы используете ASCII.Обычно при использовании переменных .net у вас есть строка UTF-8.Для этого я рекомендую вам прочитать Джоэл об основах юникода

Вы должны всегда использовать кодировку, с которой была создана строка.Когда вы преобразуете байтовые данные в строку и у вас нет правильной кодировки, символы, которые не могут быть отображены, будут возвращать неожиданные символы.(Нравится?)

0 голосов
/ 02 января 2012

Как насчет попытки декодировать Base64 и перехватить исключение, если оно не может быть декодировано?

string DecryptConnectionString(string connectionString)
{
   string result;

    try
    {
        Byte[] b = Convert.FromBase64String(connectionString);
        result = decrypt(b);
    }
    catch (FormatException e)
    {
        result = connectionString;
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...