Предполагая, что у меня есть этот метод.
private static void Example(string data)
{
Console.WriteLine("Initial : {0}", data);
data = data.PadRight(data.Length + 1, '0');
Console.WriteLine("Step 1 : {0}", data);
data = data.PadRight(data.Length + 4 - data.Length % 4, '=');
Console.WriteLine("Step 2 : {0}", data);
byte[] byteArray = Convert.FromBase64String(data);
string newData = Convert.ToBase64String(byteArray);
Console.WriteLine("Step 3 : {0}", newData);
}
Я ожидаю, что вывод с учетом входной строки «1» будет следующим
Initial : 1
Step 1 : 10
Step 2 : 10==
Step 3 : 10==
Вместо этого вывод такой.
Initial : 1
Step 1 : 10
Step 2 : 10==
Step 3 : 1w==
И я понятия не имею, почему. Я ожидал бы, что вывод будет таким же, как ввод, но это не так. Я попытался заменить
data = data.PadRight(data.Length + 1, '0');
с участием
data = data + "0";
Он появляется и с более длинными входными строками, например, со строками длиной 5 или 9. Он отлично работает, если я добавляю "=", но затем я превышаю лимит заполнения с помощью Convert.FromBase64String()
Итак, мой вопрос на самом деле заключается в том, что происходит и как я могу получить ожидаемый результат? Что я делаю неправильно?
Изменить: для тех, кто не понимает, почему я использую bas64, это связано с этим PHP расшифровывает данные с помощью закрытого ключа RSA
string newData = System.Text.Encoding.Default.GetString(byteArray);
- person MethodMan   schedule 22.08.2014Step 3 : x
Но дело в том, что если ввод состоит из 2 символов, и я добавляю 2 отступа =, тогда все в порядке. Также, если я добавлю несколько символов в строку, которая не является дополнением, любые добавленные символы станут w - person That Homeless Guy   schedule 22.08.2014