Szyfrowanie kluczem symetrycznym (np. DES)

  1. Przeanalizuj i przetestuj poniższy przykład.

  2. Napisz program ktory bedzie pozwalal na wprowadzanie tekstu z klawiatury, szyfrował go za pomocą hasła i zapisywal do pliku, a także czytał z pliku i deszyfrował zapisany tam tekst (menu tekstowe).

  3. Za pomoca komponentow Swinga (JTextArea, JPasswordField i JButton) napisz elektroniczny pamietnik zapisujacy zakodowany 
    za pomoca hasla tekst do pliku).


import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;





public class DesTest
{
   public static void main(String args[]) throws Exception                                                        
   {                                                                                                              
      String msg="pozdrowienia od cioci";                                                                         
                                                                                                                  
      String passwd="tajnehaslo";                                                                                 
      byte[] b=passwd.getBytes();                                                                                 
                                                                                                                  
                                                                                                                  
                                                                                                                  
      //-- generowanie klucza --                                                                                  
      System.out.println("tworzy generator kluczy");                                                              
      KeyGenerator kgen = KeyGenerator.getInstance("DES");                                                        
      kgen.init(new java.security.SecureRandom(b));                                                               
                                                                                                                  
      System.out.println("generuje klucz");                                                                       
      SecretKey key = kgen.generateKey();                                                                         
                                                                                                                  
                                                                                                                  
                                                                                                                  
      //-- szyfrowanie --                                                                                         
      System.out.println("tworzy obiekt klasy Cipher");                                                           
      javax.crypto.Cipher c1 = javax.crypto.Cipher.getInstance("DES");                                            
                                                                                                                  
      System.out.println("inicjuje cipher do szyfrowania");                                                       
      c1.init(Cipher.ENCRYPT_MODE,key);                                                                           
                                                                                                                  
      ObjectOutputStream out=new ObjectOutputStream(new CipherOutputStream(new FileOutputStream("plik.txt"),c1)); 
      out.writeObject(msg);                                                                                       
      out.flush();                                                                                                
      out.close();                                                                                                
                                                                                                                  
                                                                                                                  
                                                                                                                  
      //-- deszyfrowanie --                                                                                       
      System.out.println("tworzy obiekt klasy Cipher");                                                           
      javax.crypto.Cipher c2 = javax.crypto.Cipher.getInstance("DES");                                            
                                                                                                                  
      System.out.println("inicjuje cipher do deszyfrowania");                                                     
      c2.init(Cipher.DECRYPT_MODE,key);                                                                           
                                                                                                                  
      ObjectInputStream in=new ObjectInputStream(new CipherInputStream(new FileInputStream("plik.txt"),c2));      
      String str=(String)in.readObject();                                                                         
      in.close();                                                                                                 
                                                                                                                  
      System.out.println("\n-- "+str+" --\n");                                                                    
   }                                                                                                              
}