Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с расшифровкой файлов / 1 сообщений из 1, страница 1 из 1
07.07.2006, 11:05
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с расшифровкой файлов / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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