Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2014, 15:25   #1
vadym62
Новичок
Джуниор
 
Регистрация: 17.03.2013
Сообщений: 2
По умолчанию Недопустимая длина массива знаков Base-64.

Помогите разобраться с кодом.....
Выдает: недопустимая длина массива знаков Base-64.

Код:
       public Rash()
        {
            passPhase = "passPhase";
            hashAlgorithm = "MD5";
            passwordIterations = 2;
        }
        public string Encrypt(string str2crypt)
        {
            //преобразуем строку в массив бaйт в кодировке ASCII
            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
            byte[] str2cryptBytes = Encoding.UTF8.GetBytes(str2crypt);
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
            //----------------------------------------------------------
            //формируем ключ для шифрования
            PasswordDeriveBytes password = new PasswordDeriveBytes(passPhase, saltValueBytes, hashAlgorithm, passwordIterations);
            //создаём экз класса для сим шифрования
            RijndaelManaged symmCrypt = new RijndaelManaged();
            // уставн режим связанных блоков
            symmCrypt.Mode = CipherMode.CBC;
            //массив байт ключа
            byte[] keyBytes = password.GetBytes(keySize / 8);
            //создаём экз класса - шифрователя
            ICryptoTransform cryptoTransform = symmCrypt.CreateEncryptor(keyBytes, initVectorBytes);
            //теперь можно шифровать данные :
            //поток для записи данных в опертив память
            MemoryStream memStream = new MemoryStream();
            CryptoStream cryptostream = new CryptoStream(memStream, cryptoTransform, CryptoStreamMode.Write);
            //пишем в поток :
            cryptostream.Write(str2cryptBytes, //что шифруем
                0, //смещение от начало
                str2cryptBytes.Length); //длина байта
            //опустошим буфер записи
            cryptostream.FlushFinalBlock();
            //закрываем все потоки
            cryptostream.Close();
            //возьмём зашифрованые данные
            byte[] cipherBytes = memStream.ToArray();
            memStream.Close();
            //возвращаем зашифрованную строку:
            string res = Convert.ToBase64String(cipherBytes);
            return res;
        }
        public string Decrypt(string str2Decrypt)
        {
            //преобразуем строку в массив бaйт в кодировке ASCII
            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
            byte[] str2DecryptBytes = Convert.FromBase64String(str2Decrypt);
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
         
            PasswordDeriveBytes password = new PasswordDeriveBytes(passPhase, saltValueBytes, hashAlgorithm, passwordIterations);
            //создаём экз класса для сим шифрования
            RijndaelManaged symmCrypt = new RijndaelManaged();
       
            symmCrypt.Mode = CipherMode.CBC;
            //массив байт ключа
            byte[] keyBytes = password.GetBytes(keySize / 8);
            //создаём экз класса - шифрователя
            ICryptoTransform cryptoTransform = symmCrypt.CreateDecryptor(keyBytes, initVectorBytes);
            //теперь можно шифровать данные :
            //поток для чтения данных из опертив память
            MemoryStream memStream = new MemoryStream(str2DecryptBytes);
            //запускаем поток шифрования :
            CryptoStream cryptostream = new CryptoStream(memStream, cryptoTransform, CryptoStreamMode.Read);
            //создадим массив куда считывать
            byte[] decryptBytes = new byte[str2DecryptBytes.Length];
            // читаем из потока :
            int count =
            cryptostream.Read(decryptBytes, //что шифруем
                0, //смещение от начало
                decryptBytes.Length); //длина байта
        
            cryptostream.Close();
           
            memStream.Close();
            //возвращаем зашифрованную строку:
            string res = Encoding.UTF8.GetString(decryptBytes, 0, count);
            return res;
        }

        public DataTable Decrypt(DataTable ks)
        {
            string str2Decrypt;
            for (int curRow = 0; curRow < ks.Rows.Count; curRow++)
            {
                for (int curCol = 0; curCol < ks.Columns.Count; curCol++)
                {
                   
                        var s = ks.Rows[curRow][curCol].GetType();
                        if (ks.Rows[curRow][curCol].GetType() == i.GetType())
                        {
                            str2Decrypt = Convert.ToString(ks.Rows[curRow][curCol]);

                            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
                            byte[] str2DecryptBytes = Convert.FromBase64String(str2Decrypt);
                            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.05.2014 в 19:39.
vadym62 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переменная длина динамического массива PierL Общие вопросы Delphi 19 18.04.2014 23:43
Длина многомерного массива Johnson Общие вопросы Delphi 2 18.02.2011 08:25
длина массива Артэс Общие вопросы C/C++ 4 06.10.2010 12:34
длина массива skif93 Microsoft Office Excel 2 24.11.2007 11:45