Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > криптография


Автор: can4ec 30.11.2007, 00:05
Здравствуйте!!! Вот это мой  тестовый пример. Я  зашифровываю данные , а потом сразу их пытаюсь расшифровываю, но результат не утешительный.

Код

 //шифрую
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            keyGenerator.init(new SecureRandom());
            SecretKey key = keyGenerator.generateKey();
            System.out.println(key);
            String data = "abc";
            Cipher cipher = Cipher.getInstance("DES");

            cipher.init(Cipher.ENCRYPT_MODE, key);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            CipherOutputStream cos = new CipherOutputStream(new ObjectOutputStream(bos), cipher);
            cos.write(data.getBytes());
            byte[] a = data.getBytes();
            byte[] s = bos.toByteArray();
            System.out.println(a.length);
            System.out.println(s.length);
            cos.close();
            bos.close();

            //расшифвровываю
            cipher.init(Cipher.DECRYPT_MODE, key);
            ByteArrayInputStream bis = new ByteArrayInputStream(s);
            CipherInputStream cis = new CipherInputStream(new ObjectInputStream(bis), cipher);
            byte[] result = new byte[bos.toByteArray().length];
            cis.read(result);
            System.out.println(result.length);
            System.out.println(new String(result));


Потоки ByteArrayOutputStream  и ByteArrayInputStream хотелось бы оставить по скоку байты мне нужны полученые при шифровании и расшифровке, а через метод этих классов toByteArray я могу получить их.

Автор: jer1 30.11.2007, 02:36
после 
Код
cos.write(data.getBytes());
 требуется 
Код
   cos.close();
 (https://java.sun.com/j2se/1.4.2/docs/api/javax/crypto/CipherOutputStream.html#close())


вместо
Код

        //расшифвровываю
  ...
          byte[] result = new byte[bos.toByteArray().length];
  ...

Код

         byte[] result = new byte[a.length]; 

Автор: can4ec 30.11.2007, 04:34
jer1:Спасибо, действительно я байты шифрованные забираю раньше чем закрыл поток.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)