powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с расшифровкой файлов
1 сообщений из 1, страница 1 из 1
Проблемы с расшифровкой файлов
    #33837640
Glotten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для шифрования файлов делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
     try 
    {
      InputStream in =  new  FileInputStream("infile.dat");
      OutputStream out =  new  FileOutputStream("outfile.dat");
      Cipher cipher = Cipher.getInstance("AES");
      cipher.init(Cipher.ENCRYPT_MODE, cryptKey);

       int  blockSize = cipher.getBlockSize();
       int  outputSize = cipher.getOutputSize(blockSize);
       byte [] inBytes =  new   byte [blockSize];
       byte [] outBytes =  new   byte [outputSize];

       int  inLength =  0 ;
       boolean  more = true;
       while (more)
      {
        inLength = in.read(inBytes);
         if (inLength==blockSize)
        {
           int  outLength = cipher.update(inBytes,  0 , blockSize, outBytes);
          out.write(outBytes,  0 , outLength);
        }  else 
          more = false;
      }
       if (inLength> 0 )
        outBytes = cipher.doFinal(inBytes,  0 , inLength);
       else 
        outBytes = cipher.doFinal();
      out.write(outBytes);

      in.close();
      out.close();

    }  catch (Exception e)  {}

Исходный файл шифруется замечательно. Однака для расшивровки необходимо считывать не их потока (как при шивровании), а из массива байт. Расшивровка происходит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
ByteArrayOutputStream buffer =  new  ByteArrayOutputStream();
	     try 
	    {
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.DECRYPT_MODE, key);


		 int  blockSize = cipher.getBlockSize();
		 int  outputSize = cipher.getOutputSize(blockSize);
		 byte [] inBytes =  new   byte [blockSize];
		 byte [] outBytes =  new   byte [outputSize];

		 int  inLength =  0 ;
		 boolean  more = true;
		 int  blocksRead =  0 ;

		 while  (more)
		{
		    
                     if (more){
                        inLength =  0 ;
			 for  ( int  i =  0 ; i < blockSize; i++)
			{
			     if  ((blocksRead * blockSize + i) < totalLen)
			    {
				inBytes[i] = buffile[blocksRead * blockSize + i];
				inLength++;
			    }
			}
                        blocksRead++;
                        
		    }

		     if  (inLength == blockSize)
		    {
                         if (  ((blocksRead- 1 )*blockSize+inLength)<totalLen ){
                             int  outLength = cipher.update(inBytes,  0 , blockSize, outBytes);
                            buffer.write(outBytes,  0 , outLength);
                        } else {
                            more = false;
                        }
		    }  else 
		    {
			more = false;
			 if  (inLength ==  0 )
			{
			    inLength = - 1 ;
			}
		    }
		}
		 if  (inLength >  0 )
		    outBytes = cipher.doFinal(inBytes,  0 , inLength);
		 else 
		    outBytes = cipher.doFinal();
		buffer.write(outBytes);

	    }  catch  (Exception e){}

Если расшифровывать несколько файлов подряд, то на некоторых вылетает ошибка:
Код: plaintext
Given  final  block not properly padded

В чем может быть ошибка?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с расшифровкой файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]