У меня есть ключ в кодировке Base64.
При попытке декодирования я получаю следующую ошибку. Ошибка выдает byte[] todecode_byte = Convert.FromBase64String(data);
Error in base64DecodeThe input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
Я использую метод ниже, чтобы декодировать это:
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);
}
}
Какое исключение выбрасывается и откуда оно выброшено?
Если он огромный, используйте PasteBin.
Ошибка, кажется, предполагает, что ваш ввод неверен. Вы проверили, что ваша строка ввода верна?
Возможно, попробуйте просмотреть необработанную строку base64 (например, установить точку останова и установить смотреть) и найти символы, отличные от base 64, более двух символов заполнения или недопустимый символ среди символов с заполнением. Не знаю, просто догадка.
Кроме того, не совсем понятно, почему вы не используете Encoding.UTF8.GetString(todecode_byte) только после декодирования base64. Но кроме того, что часть base64, конечно, не работает.
Возможно, проверьте ввод и убедитесь, что вы предоставили только base64, а не, например, строку json, содержащую значение base64.
- недопустимый символ. Откуда у тебя струна? Возможно, вам потребуется изменить символы - на + или /. Также он должен быть кратным 4 символам. Если я не ошибся, ваша строка состоит из 43 символов.
Мы получаем это из нашего внутреннего восходящего интерфейса, где утверждается, что строка является URL-адресом в кодировке Base64. Да длина 43? Вы уверены, что ключ не закодирован в формате Base64 URL?
Вы можете добавить символы =, чтобы сделать его правильной длины (т. Е. Кратной 4), но это по-прежнему оставляет проблему с недопустимым символом -. Вам нужно знать метод кодирования, который они использовали, чтобы вы знали, как исправить это для .Net.
Спасибо Мэтью за ваши комментарии. Строка ввода неверна и вызвала эту проблему.
У меня такая же проблема, за исключением того, что моя строка исходит от AESEncryption





Ваша base64-String недействительна. Он содержит недопустимый -.
static void Main()
{
string tmp = "eL78WIArGQ7bC44Ozr0yvUBkz9oc5YlsENYJilInSP= = ";
byte[] tmp2 = Convert.FromBase64String(tmp);
}
-> Убран минус
-> Добавлены два символа-заполнителя "="
Это работает. Это означает, что строка ввода, которую я использовал, неверна. Спасибо.
Минус просто не убрать! Вы меняете результаты. Вам нужно заменить его правильным символом.
Верно. Этот образец работает, но меняет результаты
Я только хотел показать проблему. Я уверен, что все знают, что интерпретация двоичных данных невозможна, если вы игнорируете некоторые байты;). @akshay: В любом случае - получи правильный ввод
Итак, есть две проблемы:
- вместо + и _ вместо /.Итак, чтобы исправить это, вам нужно поменять местами - на + и _ на / и добавить его, например:
public static byte[] DecodeUrlBase64(string s)
{
s = s.Replace('-', '+').Replace('_', '/').PadRight(4*((s.Length+3)/4), '=');
return Convert.FromBase64String(s);
}
Отправьте строку, которую вы пытаетесь декодировать (если она не слишком большая).