Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Guten Abend
Habe folgendes Problem.
Möchte ein Object abspeichern, das sozusagen mit random Werten in einer Methode erstellt wird
In einer anderen Methode möchte ich dieses Object dann aufrufen bzw mit dem gespeicherten File füllen. Erhalte ständig diesen Error:
Java:
java.lang.ClassCastException: java.io.ObjectInputStream cannot be cast to javax.crypto.SecretKey
Exception in thread "main" java.security.InvalidKeyException: No installed provider supports this key: (null)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at Encryption.decrypt(Encryption.java:160)
at Encryption.main(Encryption.java:176)
Hier der Quellcode dazu:
Java:
public static void saveObject(Object o, String filename)
{
try
{
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(o);
oos.close();
}
catch(IOException e)
{
System.err.println( e );
}
}
/**
* Aufruf eines gespeicherten SecretKey Objects
*/
public static SecretKey getSecretKey(String filename)
{
SecretKey var = null;
try
{
FileInputStream file = new FileInputStream( filename );
ObjectInputStream o = new ObjectInputStream( file );
var = (SecretKey) o;
o.close();
}
catch (Exception e)
{
System.err.println( e );
}
return var;
}
[/Java]
Methode zum speichern funktioniert zu 100%, der Aufruf in folgender Methode dann aber nicht:
[code=Java]
public static void decrypt(String filepath, String filepath_Key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
{
SecretKey secretkey = getSecretKey(filepath_Key);
....
}
Genausowenig wie Du beim Abspeichern einfach nur das Object auf einen Stream casten kannst, geht das beim Einlesen - analog zum writeObject beim Speichern fehlt hier ein readObject:
saveSecretKey war vorher schon gut, deine Änderung brachte da überhaupt nichts (außer dass Speichern evt. für alle Klassen außer SecretKey nicht mehr funktioniert),
getSecretKey liefert die Exception, die sollst du ändern,
Murray hat "readObject" gepostet, wie kannst du fortfahren ohne diese Kombination von Buchstaben irgendwo in dein Programm zu übernehmen oder nachzufragen?
Stand ein wenig auf der Leitung habs jetzt eh, war eh logisch ;D
Hätte aber noch ein Problem, könnte mir jemand dabei helfen:
Ich möchte in der Methode decrypt den Text entschlüsseln mit dem abgespeicherten Key
Quellcode:
read und write sind Methoden zum einlesen und reinschreiben ... funktionierne beide!
ERROR:
Java:
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.BlowfishCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at Encryption.decrypt(Encryption.java:161)
at Encryption.main(Encryption.java:176)
Verschlüsselung klappt, was ist hier der Fehler? :O
funktioniert die Entschlüsselung wenn du auf Spielereien (Speichern/ Laden) mit dem Schlüssel verzichtest, alles in einem Ablauf direkt hintereinander?
hast du irgendein laufendes Beispiel/ Tutorial, wie diese Verschlüsselung funktioniert?
die Fehlermeldung liefert bei Suchmaschinen einiges, kannst mal schauen, auf die Schnelle habe ich aber keine klare gemeinsame Ursache gesehen