J{0}Y Ответов: 4

Недопустимая длина для массива символов Base-64 или строки


У меня есть 2 класса
1. крипто-класс
2. класс окна входа в систему

расшифровка кода:-
public string DecryptData(string encryptedtext)
      {
          byte[] encryptedBytes = Convert.FromBase64String(encryptedtext);
          MemoryStream ms = new MemoryStream();
          CryptoStream decStream = new CryptoStream(ms, tripleDESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
          decStream.Write(encryptedBytes, 0, encryptedBytes.Length);
          decStream.FlushFinalBlock();
          return System.Text.Encoding.Unicode.GetString(ms.ToArray());
      }


Код Входа В Систему :-
MessageBox.Show(Crypto.DecryptData(obj.password))


когда мы вызываем метод decrypt, то даем исключение, которое является недопустимой длиной для массива символов Base-64 или строки

4 Ответов

Рейтинг:
28

Kornfeld Eliyahu Peter

Чтобы строка была допустимой строкой Base64, ее длина должна быть кратна 4...
Проверьте длину входной строки...
http://en.wikipedia.org/wiki/Base64[^]


J{0}Y

как проверить длину моей входной строки

Kornfeld Eliyahu Peter

if((encryptedtext.Длина % 4) == 0) // хорошо подходит для Base64

J{0}Y

http://stackoverflow.com/questions/28450852/invalid-length-for-a-base-64-char-array-or-string
проверьте эту ссылку

Kornfeld Eliyahu Peter

Я сделал...- О чем же?

J{0}Y

собственно мой вопрос

Kornfeld Eliyahu Peter

Ответ, вероятно, заключается в том, что ваша строка не закодирована base64 (base64-это не шифрование!!!)...
Однако мне до сих пор непонятно, чего вы хотите...

J{0}Y

dfghfgdfgd667878nnvghv шифруется base64 кодируется или нет

Kornfeld Eliyahu Peter

Поскольку его длина не кратна 4 - Нет, это не так

J{0}Y

ок спасибо

Рейтинг:
1

TheRealSteveJudge

Изменить

//byte[] encryptedBytes = Convert.FromBase64String(encryptedtext);
byte[] encryptedBytes = Encoding.ASCII.GetBytes(encryptedtext);

Это позволит устранить ошибку "недопустимая длина".

Более того: как вы можете расшифровать без предоставления ключа?
Пожалуйста, взгляните сюда:
Шифрование и дешифрование данных с помощью C#[^]


Рейтинг:
1

JIYAUL MUSTAPHA

byte[] b  = Convert.FromBase64String(CypherText.Replace("", "+"));


Рейтинг:
0

G.M. Patel Tana

Пожалуйста замените нижеприведенную функцию :

public string DecryptData(string encryptedtext)
{
    encryptedtext = encryptedtext.Replace(" ", "+");
    int mod4 = encryptedtext.Length % 4;
    if (mod4 > 0 )
    {
        encryptedtext += new string('=', 4 - mod4);
    }

    byte[] encryptedBytes = Convert.FromBase64String(encryptedtext);
    MemoryStream ms = new MemoryStream();
    CryptoStream decStream = new CryptoStream(ms, 
       tripleDESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
    decStream.Write(encryptedBytes, 0, encryptedBytes.Length);
    decStream.FlushFinalBlock();
    return System.Text.Encoding.Unicode.GetString(ms.ToArray());
}