Hallo,
im Rahmen einer gemeinsamen Projektarbeit (Chat) habe ich die Aufgabe bekommen ein Objekt bzw. eine Nachricht zu verschlüsseln und wieder zu entschlüsseln.
Dies will ich mit dem RSA-Verfahren umsetzen (asynchrone Verschlüsselung).
Dafür wird mir in einer Funktion der Klasse Crypt (Klasse die alle Methoden für die Verschlüsselung enthalten soll) ein Objekt der eigens hierfür erstellte Klasse "Nachricht" übergeben. Eine Instanz der Klasse Nachricht würde normalerweise einen Nachrichten Objekt String erzeugen. Nun wurden Subklassen von der Klasse Nachricht erstellt, welche auch Bilder o.ä. enthalten können.
Mir wird das dementsprechende Objekt (welches zu senden wäre) in einer Funktion übergeben. (Übergeben wird entweder ein Nachrichtenobjekt oder ein ObjectOutputStream je nachdem wie ich hier beraten werde) .
Ziel wäre es also dementsprechend folgendes umzusetzen:
Mein Objekt/ObjectOutputStream soll in ein byte[] Typ umgewandelt werden, sodass ich die RSA Verschlüsselung darauf anwenden kann. Ich wüsste nicht wie ich sonst die asynchrone Verschlüsselung anwenden soll.
Über jeglichen Input/Ratschläge/Anweisungen freue ich mich sehr und werde natürlich versuchen Sie in meinen Teil des Projekt einzuarbeiten.
Hier handelt es sich eher um eine kleine Zusammenschrift was ich alles benötigen könnte. Ich habe bereits etwas damit experimentiert, konnte aber noch nichts nennenswertes erreichen.
PS: Ich will an dieser Stelle betonen, dass ich mir keine Lösung der allgemeinen Problematik erhoffe, sondern eher eine Anleitung. Schließlich sollte ich am Ende den Sachverhalt verstanden haben, was momentan noch nicht der Fall ist. Die allgemeine RSA-Verschlüsselung anzuwenden sollte nicht das größte Problem sein. Ich habe das Problem, dass ich nicht genau weiss wo was von dem Code hingehört.
Ich hoffe Ich konnte mein Problem zumindest ansatzweise verdeutlichen.
Vielen Dank für eure Hilfe,
jackcarver12
im Rahmen einer gemeinsamen Projektarbeit (Chat) habe ich die Aufgabe bekommen ein Objekt bzw. eine Nachricht zu verschlüsseln und wieder zu entschlüsseln.
Dies will ich mit dem RSA-Verfahren umsetzen (asynchrone Verschlüsselung).
Dafür wird mir in einer Funktion der Klasse Crypt (Klasse die alle Methoden für die Verschlüsselung enthalten soll) ein Objekt der eigens hierfür erstellte Klasse "Nachricht" übergeben. Eine Instanz der Klasse Nachricht würde normalerweise einen Nachrichten Objekt String erzeugen. Nun wurden Subklassen von der Klasse Nachricht erstellt, welche auch Bilder o.ä. enthalten können.
Mir wird das dementsprechende Objekt (welches zu senden wäre) in einer Funktion übergeben. (Übergeben wird entweder ein Nachrichtenobjekt oder ein ObjectOutputStream je nachdem wie ich hier beraten werde) .
Ziel wäre es also dementsprechend folgendes umzusetzen:
Mein Objekt/ObjectOutputStream soll in ein byte[] Typ umgewandelt werden, sodass ich die RSA Verschlüsselung darauf anwenden kann. Ich wüsste nicht wie ich sonst die asynchrone Verschlüsselung anwenden soll.
Über jeglichen Input/Ratschläge/Anweisungen freue ich mich sehr und werde natürlich versuchen Sie in meinen Teil des Projekt einzuarbeiten.
Code:
public class Crypter
{
KeyPair key=null;
PublicKey pk=null;
public void getOutputStream(Nachricht msg) //oder ObjectOutputStream
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(msg);
byte [] bstream = bos.toByteArray();
return bstream;
}
public void gen()
{
final KeyPairGenerator keygen= KeyPairGenerator.getInstance("RSA");//keygenerator generieren
keygen.initialize(1024); //damit es nicht so langsam ist 2^x
final KeyPair key= keygen.generateKeyPair(); //keypair generieren also public und private?
}
public static byte[] encrypt(ObjectOutputStream oos, PublicKey pk)
{
//ObjectOutputStream wird übernommen und die in ein byteaarry
Cipher cipher=null;
try
{
cipher=Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pk);
}catch(NoSuchAlgorithmException e1)
{
e1.printStackTrace();
}
catch(NoSuchPaddingException e2)
{
e2.printStackTrace();
}
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream objectStream = new ObjectOutputStream(bos);
byte[] chiffrat=cipher.doFinal(oos.getBytes()); //hier sollte der OutputStream reinkommen/oder der String?
return chiffrat;
}catch(IllegalAccessException e3)
{
e3.printStackTrace();
}
}
public static String decrypt(byte[] chiffrat, SecretKey sk)
{
byte[] dec= null;
Cipher cipher=null;
try
{
cipher=Cipher.getInstance("RSA");
cipher.init(cipher.DECRYPT_MODE, sk);
}catch(InvalidKeyException e4)
{
e4.printStackTrace();
}
try
{
dec= cipher.doFinal(chiffrat);
}catch(IllegalBlockSizeException e5)
{
e5.printStackTrace();
}
return new String(dec);
}
public void main (String [] args)
{
gen();
byte[] enc=encrypt("hallo Welt",key.getPublic());
System.out.println(enc);
}
}
Hier handelt es sich eher um eine kleine Zusammenschrift was ich alles benötigen könnte. Ich habe bereits etwas damit experimentiert, konnte aber noch nichts nennenswertes erreichen.
PS: Ich will an dieser Stelle betonen, dass ich mir keine Lösung der allgemeinen Problematik erhoffe, sondern eher eine Anleitung. Schließlich sollte ich am Ende den Sachverhalt verstanden haben, was momentan noch nicht der Fall ist. Die allgemeine RSA-Verschlüsselung anzuwenden sollte nicht das größte Problem sein. Ich habe das Problem, dass ich nicht genau weiss wo was von dem Code hingehört.
Ich hoffe Ich konnte mein Problem zumindest ansatzweise verdeutlichen.
Vielen Dank für eure Hilfe,
jackcarver12