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