Допустимая строка Base64 не может быть декодирована - PullRequest
0 голосов
/ 26 марта 2020

У меня есть действительная строка base64, которую я могу декодировать в онлайн-инструментах, но когда дело доходит до строки ниже;

string token = "eyJ1bmlxdWVfbmFtZSI6InllbmVyLnlpbG1hekB5ZHlhemlsaW0uY29tIiwiZ2l2ZW5fbmFtZSI6Ik1laG1ldCBZZW5lciIsImZhbWlseV9uYW1lIjoiWUlMTUFaIiwiZW1haWwiOiJ5ZW5lci55aWxtYXpAeWR5YXppbGltLmNvbSIsInJvbGUiOiJBZG1pbiIsIm5iZiI6MTU4NTI0OTI1NCwiZXhwIjoxNTg1ODU0MDU0LCJpYXQiOjE1ODUyNDkyNTR9==";
try
{
    var asd = Convert.FromBase64String(token);
}
catch (Exception ex)
{
    throw;
}

Выдает исключение ..

Сообщение об исключении:

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

Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

Поскольку строка Base64 отображает каждый байт от 6 бит до 8 бит, таким образом, каждые 3 байта (24 бита) становятся 4 байтами. Длина строки Base64 должна делиться на 4, если к ее концу добавляется не столько = символов, сколько необходимо (что на самом деле не является частью его содержимого), чтобы длина делилась на 4.

Поскольку длина вашей строки Base64 уже делится на 4, нет необходимости в дополнительных = символах.

1 голос
/ 26 марта 2020

Вы могли проверить валидатор .

Это работает:

    string s  = "eyJ1bmlxdWVfbmFtZSI6InllbmVyLnlpbG1hekB5ZHlhemlsaW0uY29tIiwiZ2l2ZW5fbmFtZSI6Ik1laG1ldCBZZW5lciIsImZhbWlseV9uYW1lIjoiWUlMTUFaIiwiZW1haWwiOiJ5ZW5lci55aWxtYXpAeWR5YXppbGltLmNvbSIsInJvbGUiOiJBZG1pbiIsIm5iZiI6MTU4NTI0OTI1NCwiZXhwIjoxNTg1ODU0MDU0LCJpYXQiOjE1ODUyNDkyNTR9";
    var c = Convert.FromBase64String(s);
    Console.WriteLine(System.Text.ASCIIEncoding.ASCII.GetString(c));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...