Hallo,
eigentlich dachte ich, dass meine Kenntnisse zu Verschlüsselung und Streams ganz gut sind, anscheinend ist dem aber nicht so. Bei unten gezeigten Code wird ein String verschlüsselt, über einen OutputStream gesendet und an der Serverseite abgegriffen. So weit, so gut, an beiden Seiten ist es derselbe Inhalt (über Hash geprüft) und auch der PublicKey, der auf der Clientseite als Datei vorliegt ist als PublicKey Object derselbe wie auf der Serverseite (auch über Hash geprüft). Dennoch schlägt die Entschlüsselung mit meinem PrivateKey fehl. Könnt ihr erkennen, wo ich einen Fehler gemacht habe? Vielleicht ist die Uhrzeit etwas zu spät und ich habe einfach einen banalen Fehler eingebaut, welchen ich nicht erkenne. Danke im Voraus.
ClientSeite zum Verbindungsaufbau:
ServerSeite mit Empfang des SessionKeys:
eigentlich dachte ich, dass meine Kenntnisse zu Verschlüsselung und Streams ganz gut sind, anscheinend ist dem aber nicht so. Bei unten gezeigten Code wird ein String verschlüsselt, über einen OutputStream gesendet und an der Serverseite abgegriffen. So weit, so gut, an beiden Seiten ist es derselbe Inhalt (über Hash geprüft) und auch der PublicKey, der auf der Clientseite als Datei vorliegt ist als PublicKey Object derselbe wie auf der Serverseite (auch über Hash geprüft). Dennoch schlägt die Entschlüsselung mit meinem PrivateKey fehl. Könnt ihr erkennen, wo ich einen Fehler gemacht habe? Vielleicht ist die Uhrzeit etwas zu spät und ich habe einfach einen banalen Fehler eingebaut, welchen ich nicht erkenne. Danke im Voraus.
ClientSeite zum Verbindungsaufbau:
Java:
@Override
public SecretKey encryptedSocketInitializing(EncryptedSocket es,PublicKey partnerPublic) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
String sessionString = EncryptionUtil.randomString(80);
OutputStream writer = es.getOutputStream();
byte[] enc = EncryptionUtil.encrypt(AsymmetricEncryption.RSA, sessionString.getBytes("UTF-8"), partnerPublic);
writer.write(1);writer.flush(); //Nicht im Code gezeigt, verursacht aber nicht den Fehler
writer.write(enc);writer.flush();System.out.println("HASH: " + EncryptionUtil.createHash("MD5", enc));
return EncryptionUtil.getKey(SymmetricEncryption.Blowfish, sessionString);
}
ServerSeite mit Empfang des SessionKeys:
Java:
byte[] readings = new byte[256];
in.read(readings,0,256);
System.out.println("HASH: " + EncryptionUtil.createHash("MD5", readings));//Hashes stimmen überein
byte[] decrypt = EncryptionUtil.decrypt(AsymmetricEncryption.RSA, readings, privateKey); //Hier bekomme ich eine BadPaddingException
sessionKey = EncryptionUtil.getKey(SymmetricEncryption.Blowfish,new String(decrypt,"UTF-8"));
trusted = true;
input = new EncryptedInputStream(sessionKey, this.getInputStream());
output = new EncryptedOutputStream(sessionKey, this.getOutputStream());
init = true;
return true;