RSA Verschlüsselung Testen / byte[] in Objekt umwandeln

Jackcarver12

Mitglied
Java:
package Client;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class Crypt
{
    KeyPair key=null;
    PublicKey pk=null;

    
    public KeyPair getKey()
    {
        return key;
    }

    public void setKey(KeyPair key)
    {
        this.key = key;
    }

    public PublicKey getPk()
    {
        return pk;
    }

    public void setPk(PublicKey pk)
    {
        this.pk = pk;
    }

    
    
    
    //Generiert die Schüssel bereitet alles für die Verschlüsselung vor
    public void gen() 
    {
        
        KeyPairGenerator keygen=null;
        try
        {
            keygen = KeyPairGenerator.getInstance("RSA");
        } catch (NoSuchAlgorithmException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//keygenerator generieren
        
        keygen.initialize(1024); // 2^x
        final KeyPair key= keygen.generateKeyPair();    //keypair generieren also public und private?     
    }
    
    
    
    //Wandelt das Nachrichtenobjekt in ein byte[] um und returnt das byte[]
    public byte[] getByteStream(Nachricht msg)
    {
        gen();
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          ObjectOutputStream oos=null;
        try
        {
            oos = new ObjectOutputStream(bos);
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          try
        {
            oos.writeObject(msg); //Objekt in das byte[] schreiben
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          byte [] bstream = bos.toByteArray();
          
          return bstream;
    
    }
    
    //verschlüsseln des byte[]
    public byte[] vByteArray(byte[] ostream, PublicKey pk)
    {
        Cipher cipher=null;
        byte[] chiffrat=null;
        
        try
        {
            cipher=Cipher.getInstance("RSA");
            try
            {
                cipher.init(Cipher.ENCRYPT_MODE, pk);
            } catch (InvalidKeyException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }catch(NoSuchAlgorithmException e1)
        {
            e1.printStackTrace();
        }
        catch(NoSuchPaddingException e2)
        {
            e2.printStackTrace();
        }
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try
        {
            ObjectOutputStream objectStream = new ObjectOutputStream(bos);
        } catch (IOException e1)
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        try
        {
            chiffrat=cipher.doFinal(ostream);
        } catch (IllegalBlockSizeException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadPaddingException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } //ist das so korrekt?
        return chiffrat; //verschlüsselt mit RSA
    }
    
    public static Nachricht decrypt(byte[] chiffrat, SecretKey sk)
    {
        
        byte[] dec= null;
        Cipher cipher=null;
        
        
        try //er will dass ich doppelt trycatche warum?
        {
         try
        {
            cipher=Cipher.getInstance("RSA");
        } catch (NoSuchAlgorithmException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchPaddingException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        cipher.init(cipher.DECRYPT_MODE, sk);
        }catch(InvalidKeyException e4)
        {
            e4.printStackTrace();
        }
        
        
        try //warum muss ich hier doppel und dreifach trycatchen? das ist doch quatsch so oder nicht?
        {
            
        try
        {
            dec= cipher.doFinal(chiffrat);
            
        } catch (BadPaddingException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        }catch(IllegalBlockSizeException e5)
        {
            e5.printStackTrace();
        }
        return new Nachricht(dec); //hier muss nun noch aus dem chiffrat wieder von byte[] zu Nachricht umgewandelt werden
        //google sagt leider nein zu der spezifischen Suche
        
        
    }
    
    public void main (String [] args)
    {
        
    }

    

}

Hallo,
ich hatte bereits ein ähnliches Thema mit einem eher unscheinbaren Titel veröffentlicht.
Dort wurde mir bereits sehr freundlich geholfen.

Klasse Crypt soll dabei alle Funktionen enthalten die ich benötigen soll:

1) cryptobjekt erstellen
2) byte[] ostream=crypt.getByteStream(Nachricht msg); //umwandeln von objektstream zu byte[]
3) byte[] vostream=crypt.encrypt(byte[] ostream, PublicKey pk); // ostream verschlüsseln
vostream=verschlüsselterbytestream (vostream=chiffrat im Code)
Empfänger:
1)cryptobjekt erstellen
2)byte[] eostream=crypt.decript(byte[] vostream,SecretKey sk); //entschlüsseln
3)eostream in Nachrichten Objekt umwandeln //ich weiss nicht wie ich es umwandeln soll

Mir wäre wichtig zu erfahren was fehlt, bzw. was ich ergänzen muss.
Ich stehe sozusagen auf dem Schlauch
 
Hier geht es weiter (ab Beitrag #8):
 

Zurück
Oben