Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> защита сетевого трафика, с помощью алгоритма DES 
V
    Опции темы
ARTi13
Дата 7.1.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.1.2008
Где: г. Хабаровск

Репутация: нет
Всего: нет



Привет всем!  я начинающий  smile в языке JAVA.  Помогите, пожалуйста разобраться с ниже описанной задачей. я приведу листинги как могу не знаю пока как здесь работать, хотя перечитал большое количество относительно этого. И так, в первом листинге программа клиента производится считывание исходного текста с файла с помощью потока, затем считанные  данные записываются в другой поток, где производится его шифрование с помощью алгоритма DES и передача на сервер (второй листинг) для обратного преобразования т.е. чтение, дешифрация и помещение файла на диск. Шифрование исходного текста и передача на сервер  производится, однако помимо этого мне надо вывести исходный текст  в окно Исходный текст, а шифрованный в окно Шифрованный текст! Не могу осуществить данную задачу. В моём коде выводится числовые значения в место текста и те в оба окна одновременно:(. Могу привести коментарий ко всему коду, однако думаю что он только запутает. Но, если надо приведу, так же приведу код графической части, если надо. Буду признателен за любую помощь!!!
листинг клиента.
Код

import java.io.*;
import java.net.*;
import java.security.*;
//Пакет расширеный Java
import javax.crypto.*;
import javax.swing.*;

public class ThreadClient implements Runnable {
     JTextArea Inputscc;
     JTextArea Outputscc;

public ThreadClient (JTextArea u, JTextArea o)
{
     Inputscc = u;
     Outputscc = o;  
}

  public void run(){
      try{
   String host = "127.0.0.1"; //Объявление объекта host как строковый значение   
int port = Integer.parseInt ("8189");//Объявление объекта port как целое число
//Инициализация объекта s с параметрами host и port
 Socket s = new Socket(host, port);
Inputscc.append("Попытка соединения с сервером");
Inputscc.append("\nCоединения с сервером состоялось");
 try {
  File f= new File ("C://Temp//in.txt"); 
  SecretKey key = null;
  
  try {
   // Does a DESKey.ser file exist?
   ObjectInputStream keyFile = new ObjectInputStream(
    new FileInputStream("DESkey.ser"));
   key = (SecretKey) keyFile.readObject();
   keyFile.close();
  }catch(FileNotFoundException e) {
   // If not, generate and save a new key.
   try {
    KeyGenerator keygen = KeyGenerator.getInstance("DES");
    key = keygen.generateKey();
    ObjectOutputStream keyFile = new ObjectOutputStream(
     new FileOutputStream("DESkey.ser"));
    keyFile.writeObject(key);
    keyFile.close();
   }catch(NoSuchAlgorithmException ex) {  
   Outputscc.append("\nDES ключ генератором не сделан.");
    System.exit(0);
   }catch(IOException ex) {
    Outputscc.append("\nОшибка сохранения ключа.");
    System.exit(0);
   }
  }catch(Exception e) {
    Outputscc.append("\nОшибка чтения ключа.");
    System.exit(0);  
  }
  // Create a cipher
  Cipher cipher = null;
  try {
   cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
   cipher.init(Cipher.ENCRYPT_MODE,key);
  }catch(InvalidKeyException e) {
  Outputscc.append("\nКлюч не исправен.");
   System.exit(0);   
  }catch(Exception e) {
   Outputscc.append("\nОшибка создания шифра.");
   System.exit(0);
  }
  // Read and encrypt file.
  try {
  InputStreamReader in =new InputStreamReader(new FileInputStream(f),"ISO8859_1"); 

  CipherOutputStream out = new CipherOutputStream(s.getOutputStream(), cipher);  
   int i;//проблема видимо в этом коде, однако другой пока не 
//могу придумать:(
   do {
    i = in.read();
   Inputscc.append("\n "+i);
   if(i != -1) out.write(i);
   Outputscc.append(""+i+"\n");
   } while(i != -1);
   in.close();
Inputscc.append("\n "+in);
   out.close();   //
  }catch(IOException e) {
  Outputscc.append("\nОшибка чтения/шифрования.");
  }
  }catch(Exception e){}          
 } catch(IOException e){}
  }
 }


листинг сервера

Код

import java.io.*;
import java.net.*;
import java.security.*;
//Пакет расширеный Java
import javax.crypto.*;
import javax.swing.*;
public class ThreadServer implements Runnable
{
 JTextArea Inputscs;
 JTextArea Outputscs;
 public ThreadServer (JTextArea i, JTextArea o)
    {      
     Inputscs = i;    
     Outputscs = o;    
    }
     public void run() {
      try
        {
          Inputscs.append("Ожидание установления связи с клиентом");
          ServerSocket s = new ServerSocket(8189);
           for (;;)
            {
                Socket incoming = s.accept();
               Inputscs.append("\nСоединения с клиентом установлено");              
 try { 
  File f = new File("C:/Temp/out.txt");
  SecretKey key = null;
  
  try {
   // Does a DESKey.ser file exist?
   ObjectInputStream keyFile = new ObjectInputStream(
    new FileInputStream("DESkey.ser"));
   key = (SecretKey) keyFile.readObject();
   keyFile.close();
  }catch(FileNotFoundException e) {
   // If not, report error and exit.
   Outputscs.append("\nКлюч файла не сделан.");
   System.exit(0);
  }catch(Exception e) {
    Outputscs.append("\nОшибка чтения ключа.");
   System.exit(0);  
  }
  // Create a cipher
  Cipher cipher = null;
  try {
   cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
   cipher.init(Cipher.DECRYPT_MODE,key);
  }catch(InvalidKeyException e) {
    Outputscs.append("\nКлюч неисправен.");
   System.exit(0);   
  }catch(Exception e) {
    Outputscs.append("\nОшибка создания шифра.");
   System.exit(0);
  }
  // Read and decrypt file.
        try {
       CipherInputStream in = new CipherInputStream(incoming.getInputStream(), cipher);
   OutputStreamWriter out = new  OutputStreamWriter (new FileOutputStream(f), "ISO8859_1");
  
     int l;
   do {
    l= in.read();
     Inputscs.append(""+l+"\n");
    if(l != -1) out.write(l);
     Outputscs.append(""+l+"\n");
   } while(l>0);
   
  in.close();
   out.close();
   
   Outputscs.append("\nПриём зашифрованного файла от клиента состоялся");
   Outputscs.append("\nЗашифрованный файл был успешно расшифрован");
   Outputscs.append("\nОжидается следующее подключение к серверу");
  }catch(Exception e) {
   System.out.println(e);
    Outputscs.append("Ошибка чтения/дешифрации.");
   e.printStackTrace();
  }
 }catch(Exception e){}
            }                
 }catch(Exception e){
  Outputscs.append("/nПопытка устанавления связи с клиентом не удалась"+e);}     
      }     
 }
  


PM MAIL   Вверх
v2v
Дата 11.1.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



заметил строку у тебя 
Код

("\nКлюч файла не сделан.");
а как это ??))))  smile  smile 


по сабжу : 
Код

 l= in.read();
     Inputscs.append(""+l+"\n");
    if(l != -1) out.write(l);
     Outputscs.append(""+l+"\n");

ты ж в оба своих текстовых оля пишешь из одного потока  - in - потока шифрованного текста ).
тебе же надо во второе окно Outputscs как то выводить из потока out - расшифрованного текста.
это я про серверную часть ... 


Это сообщение отредактировал(а) v2v - 11.1.2008, 21:29


--------------------
PM   Вверх
ARTi13
  Дата 12.1.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.1.2008
Где: г. Хабаровск

Репутация: нет
Всего: нет



Спасибо за внимание (всем) и помощь (v2v) smile 
Цитата

заметил строку у тебя 
Код

("\nКлюч файла не сделан.");

а как это ??))))  smile  smile 

ты прав там должно быть 
Код

("\nКлюч файла не найден.");
 извини, перепутал взял с другого алгоритма 

Цитата


[code=java]
l= in.read();
     Inputscs.append(""+l+"\n");
    if(l != -1) out.write(l);
     Outputscs.append(""+l+"\n");
Код




я привел этот алгоритм потому, что другого не могу пока придумать опыта мало. Можешь знаешь где посмотреть можно примеры алгоритмов считывания потоков и отображение их в GUI? 
Цитата

ты ж в оба своих текстовых оля пишешь из одного потока  - in - потока шифрованного текста ).
тебе же надо во второе окно Outputscs как то выводить из потока out - расшифрованного текста.
это я про серверную часть ...

Посмотри пожалуйста архивированный файл клиент там видно, что на рисунке 1-КлинтНеПравильный выводится моя ошибка в окнах Исходный текст и Шифрованный текст выводится числовые значения в место текста и те в оба окна одновременно. На другом рисунке видно, что на рисунке 2-КлиентПравильный выводится всё правильно в окне Исходный текст выводится исходный текст, в окне же Шифрованный текст выводится шифрованный. На сервере тоже самое:(. Стремлюсь к осуществлению изображенного на рис.2 варианту увы пока не получается изменить код так чтобы всё было правильно. Буду признателен за любую помощь!!! 



Это сообщение отредактировал(а) ARTi13 - 12.1.2008, 18:35

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  ______.rar 113,52 Kb
PM MAIL   Вверх
v2v
Дата 12.1.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



Код

("\nКлюч файла не найден.");

Это бред. 
Ключ - это набор символов, которые хранится в файле, и спользуются для шифрование / расшифровки других данных, например из другого файла. Хоть убейте не могу въехать в суть этой фразы).
Должно быть что то вроде: "Файл с ключём не найден" (файл, в котором хранится ключ не найден) и т.п. ;)

теперь насчёт твоих чисел:
Код

     Inputscs.append(""+l+"\n");

тут ты выводишь один байт шифрованного текста  (  l= in.read(); ) ... если ты хочешь что-бы это были символы, сделай так:
Код

     Inputscs.append(""+(char)l+"");

да и переводить каретку на новую строку тебе не нужно после каждого символа....




--------------------
PM   Вверх
ARTi13
Дата 31.1.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.1.2008
Где: г. Хабаровск

Репутация: нет
Всего: нет



 Большое человеческое тебе СПАСИБО!!! (v2v)
всё получилось, как только приведу текст кода в человеческий вид, распалажу его на форуме!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.