Unab Ie to Convert.FromBase64String строка в кодировке base64 - PullRequest
0 голосов
/ 13 июля 2020

"eyJwYXltZW50SWQiOiI1ZjBjMmJmZmFiNDRlMjJjNjhiZWUzMDkiLCJjdXN0b21lckRldGFpbHMiOnsiZmlyc3ROYW1lIjoiY3NKb2huMSIsImxhc3ROYW1lIjoiY3NEb2UxIiwidXNlcklkIjoiNWVmNGI1OGZkYjUyZjk1ZGY4NWYwMjg0In0sIm9yZGVyRGV0YWlscyI6eyJvcmRlcklkIjoiNWYwYzJiZmZmYjVkYTIzNTcwYjhjM2JhIiwiY3VycmVuY3kiOm51bGwsImFtb3VudCI6IjU0LjAwIn0sIm1lcmNoYW50RGV0YWlscyI6eyJuYW1lIjoiRENQIn0sImlhdCI6MTU5NDYzMzIxNSwiZXhwIjoxNTk0NjMzODE1fQ"

1002 * Когда я попытался Convert.FromBase64String на строке выше я получил ошибку говоря
1006 * вход не является допустимым Base-64 строку- он содержит символ, отличный от базовых 64, более двух символов заполнения или недопустимый символ среди символов заполнения

Я даже добавил символ = в конце строки, но это не сработало, но когда я декодирую ту же строку в Notepad ++, я получаю JSON Data.

Ответы [ 2 ]

4 голосов
/ 13 июля 2020

Строка неправильно заполнена, как заметил Crowcoder. Строка base64 может быть дополнена 0, 1 или 2 знаками равенства (=), некоторые реализации не заботятся об этом, но некоторые делают (например, Convert.FromBase64String). Вам нужна длина строки, кратная 4, если это не так, вы должны заполнить ее знаками равенства.

Что-то вроде этого.

var str = "eyJwYXltZW50SWQiOiI1ZjBjMmJmZmFiNDRlMjJjNjhiZWUzMDkiLCJjdXN0b21lckRldGFpbHMiOnsiZmlyc3ROYW1lIjoiY3NKb2huMSIsImxhc3ROYW1lIjoiY3NEb2UxIiwidXNlcklkIjoiNWVmNGI1OGZkYjUyZjk1ZGY4NWYwMjg0In0sIm9yZGVyRGV0YWlscyI6eyJvcmRlcklkIjoiNWYwYzJiZmZmYjVkYTIzNTcwYjhjM2JhIiwiY3VycmVuY3kiOm51bGwsImFtb3VudCI6IjU0LjAwIn0sIm1lcmNoYW50RGV0YWlscyI6eyJuYW1lIjoiRENQIn0sImlhdCI6MTU5NDYzMzIxNSwiZXhwIjoxNTk0NjMzODE1fQ";

if(str.Length % 4 != 0)
  str += new String('=', 4 - str.Length % 4);

Convert.FromBase64String(str);
1 голос
/ 13 июля 2020

Фрагмент для дополнения исходной строки:

        var base64Source = "eyJwYXltZW50SWQiOiI1ZjBjMmJmZmFiNDRlMjJjNjhiZWUzMDkiLCJjdXN0b21lckRldGFpbHMiOnsiZmlyc3ROYW1lIjoiY3NKb2huMSIsImxhc3ROYW1lIjoiY3NEb2UxIiwidXNlcklkIjoiNWVmNGI1OGZkYjUyZjk1ZGY4NWYwMjg0In0sIm9yZGVyRGV0YWlscyI6eyJvcmRlcklkIjoiNWYwYzJiZmZmYjVkYTIzNTcwYjhjM2JhIiwiY3VycmVuY3kiOm51bGwsImFtb3VudCI6IjU0LjAwIn0sIm1lcmNoYW50RGV0YWlscyI6eyJuYW1lIjoiRENQIn0sImlhdCI6MTU5NDYzMzIxNSwiZXhwIjoxNTk0NjMzODE1fQ";
        var requiredPadding = 4 - base64Source.Length % 4;
        if (requiredPadding > 0)
        {
            base64Source += new string(Enumerable.Repeat('=', requiredPadding).ToArray());
        }
        var result = Convert.FromBase64String(base64Source);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...