String verschlüsseln - Applet - ohne BASE64

Blackhole16

Bekanntes Mitglied
Gute Abend Community,

ich möchte gerne in einem Applet einen String verschlüsseln. Über BASE64 geht das bei Anwendungen ja sehr gut, nur leider kommt bei Applets eine java.security.AccessControlException 🙁 .

Wie kann ich nun einen String in Java (Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen) so verschlüsseln, dass es auch in einem unsignierten Applet läuft?

mfg
BH16

PS: Hab über SuFus bisher nichts gefunden, kann vielleicht auch daran liegen, dass ich falsche Keywords benutzt hab...
 
ACHTUNG! Base64 ist keine Verschlüsselung!
Du kannst DES, AES oder RSA benutzen. Einfach mal Googlen. Für DES ist in java.security oder javax.crypto schon was drin glaub ich.
 
Ich hab bisher den BASE64DE/Encoder mit nem chiperoutputstrem und DES. habs nur mal von ner inet seite genommen und nicht ganz verstanden 😉))))

das funzt bei unsignierten applets nur leider nicht 🙁(
 
Gibts evlt. ne freie Implementierung für DES? Damit kannst du dann ja das DES machen und Base64 sollte eigentlich immer funktionieren (ein teil von Base64Encoder ist aber deprecated).
 
Hier einfach mal mein Quellcode für De- und Enkodirung:

Java:
String encode(String s) throws Exception 
	  { 
		  	byte[] bytes = s.getBytes();
		  	ByteArrayOutputStream out = new ByteArrayOutputStream(); 
		  	Cipher c = Cipher.getInstance( "DES" ); 
		  	Key k = new SecretKeySpec( "01234567".getBytes(), "DES" ); 
		  	c.init( Cipher.ENCRYPT_MODE, k ); 
	 
		  	OutputStream cos = new CipherOutputStream( out, c ); 
		  	cos.write( bytes ); 
		  	cos.close(); 
		  
		  	return new BASE64Encoder().encode( out.toByteArray() );
	  } 
 
	  String decode(String s) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException
	  { 
		  	byte[] decode = new BASE64Decoder().decodeBuffer(s);
		  	InputStream is = new ByteArrayInputStream(decode);
		    Cipher c = Cipher.getInstance( "DES" ); 
		    Key k = new SecretKeySpec( "01234567".getBytes(), "DES" ); 
		    c.init( Cipher.DECRYPT_MODE, k ); 
	 
		    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
		    CipherInputStream cis = new CipherInputStream( is, c ); 
		 
		    for ( int b; (b = cis.read()) != -1; ) 
		    	bos.write( b ); 
	 
		    cis.close(); 
		    return new String(bos.toByteArray()); 
	  }

es kommt aber, wenn ich es als applet starte diese Fehlermeldung:

Java:
Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.misc)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPackageAccess(Unknown Source)
	at sun.plugin2.applet.Applet2SecurityManager.checkPackageAccess(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at Crypt.decode(Crypt.java:29)

kannst du mir jetzt genauer helfen?

mfg
BH16

PS: danke für deine bisherige Hilfe
 
Ja, das habe ich gemeint:
[JAVA=13]return new BASE64Encoder().encode( irgend_ein_bytearray );[/code]
Wenn du von einer freien DES implementierung dann dein Byte-Array bekommst kannst du das damit schön formatieren.
 
Danke für deine Hilfe, echt, aber ich muss dir leider sagen, dass ich nix verstanden habe 🙁

Mit Verschlüsselungen kenn ich micht nicht so gut aus (überhaupt nicht), brauch aber die Funktion, in einem Applet einen String zu verschlüsseln.

Kannst du mir das bitte genauer erklären, vllt mit Pseudo-Code?
Das wäre echt extrem nett.

mfg
BH16
 
Java:
byte[] message="Hallo Welt".getBytes();
byte[] encrypted=DESMachine.encrypt(message, "schlüssel".getBytes());
System.out.println((new BASE64Encoder()).encode(irgend_ein_bytearray));
Aber eben eine mothode wie [c]DESMachine.encrypt(...);[/c] musst du dir halt durch ein offenes Framework und nicht durchd as Java-Interne besorgen.
 

Zurück
Oben