Выдает исключение при преобразовании строки в base64 - PullRequest
1 голос
/ 12 июня 2019

У меня есть два метода, в которых мне нужно преобразовать строку в base64 в начале и полностью изменить эту операцию в конце. Проблема в том, что когда длина моей входной строки не делится на 4, метод преобразования выдает исключение.

public class Hashing
{
    public string Encrypt(string encrypted)
    {
        byte[] byteData = Convert.FromBase64String(encrypted);
        byte[] byteResult = Encrypt(byteData); // pt.1
        return Convert.ToBase64String(byteResult);
    }

    public string Decrypt(string decrypted)
    {
        byte[] byteData = Convert.FromBase64String(decrypted);
        byte[] byteResult = Decrypt(byteData); //pt.2
        return Convert.ToBase64String(byteResult);
    }

    /*
    ...
    */
}

class Program
{
    static void Main(string[] args)
    {
        Hashing cryptographyContext = new Hashing();

        var cryptoTest = "123456789"; //someStringThatNotGonnaBeConverted;

        string enc = cryptographyContext.Encrypt(password);
        string dec = cryptographyContext.Decrypt(enc);

        Console.WriteLine(dec);
        Console.ReadLine();
    }
}

Проблема в том, что мне нужен формат base64 при вводе методов Decrypt и Encrypt (см. Пункты 1 и 2), и мне нужно возвращать строки из этих методов. У кого-нибудь есть идеи, как обойти это поведение?

1 Ответ

3 голосов
/ 12 июня 2019

Вы используете base-64 неправильно; base-64 переводит:

  • вперед, произвольно byte[] до структурировано string
  • задом наперед, структурированный string к исходному byte[]

И наоборот, обычное кодирование текста работает по-другому:

  • вперед, произвольно string до структурировано byte[]
  • назад, структурировано byte[] до оригинала string

Вы пытаетесь использовать base-64 для получения byte[] от произвольного string, что не то, что делает . Для этого вам понадобится обычная текстовая кодировка , такая как UTF-8. Попробуйте использовать Encoding.UTF8.GetBytes() и т. Д. Вместо одна половина , а base-64 для другая :

public string Encrypt(string plainText)
{
    byte[] byteData = Encoding.UTF8.GetBytes(plainText);
    byte[] byteResult = Encrypt(byteData);
    return Convert.ToBase64String(byteResult);
}

public string Decrypt(string cipherText)
{
    byte[] byteData = Convert.FromBase64String(cipherText);
    byte[] byteResult = Decrypt(byteData);
    return Encoding.UTF8.GetString(byteResult);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...