Convert.FromBase64String () выбрасывает ошибку «неверная строка Base-64» - PullRequest
0 голосов
/ 25 мая 2018

У меня есть ключ в кодировке Base64.

При попытке декодирования я получаю следующую ошибку.Ошибка выдается byte[] todecode_byte = Convert.FromBase64String(data);

Ошибка в base64DecodeВход не является допустимой строкой Base-64, так как содержит неосновной 64-символ, более двух символов заполнения или недопустимый символ срединабивочные символы.

Я использую следующий метод для декодирования этого:

public string base64Decode(string data)
{
    try
    {
        System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
        System.Text.Decoder utf8Decode = encoder.GetDecoder();

        byte[] todecode_byte = Convert.FromBase64String(data); // this line throws the exception

        int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
        char[] decoded_char = new char[charCount];
        utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
        string result = new String(decoded_char);
        return result;
    }
    catch (Exception e)
    {
        throw new Exception("Error in base64Decode" + e.Message);
    }
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Итак, есть две проблемы:

  1. Ваша строка не кратна длине 4.Его нужно добавить к кратному 4 с использованием символов «=».
  2. Похоже, это формат base 64, используемый для URL-адресов и т. П., «Модифицированный Base64 для URL» .При этом используются - вместо + и _ вместо /.

Так что, чтобы это исправить, вам необходимо поменять местами - на + и _ на/ и добавьте его, вот так:

public static byte[] DecodeUrlBase64(string s)
{
    s = s.Replace('-', '+').Replace('_', '/').PadRight(4*((s.Length+3)/4), '=');
    return Convert.FromBase64String(s);
}
0 голосов
/ 25 мая 2018

Ваша base64-String недействительна.Он содержит -, что недопустимо.

static void Main()
{
    string tmp = "eL78WIArGQ7bC44Ozr0yvUBkz9oc5YlsENYJilInSP==";
    byte[] tmp2 = Convert.FromBase64String(tmp);
}

-> Удален минус -> Добавлены два символа-заполнителя "="

...