izpack password decrypt

lin83

Mitglied
Hallo zusammen,

ih könnte mal wieder eure Hilfe gebrauchen.
Ich habe mir ein kleinen Installer gebaut und der funktioniert auch soweit.
während des Setups frage ich ein Passwort ab und dass möchte ich nun in eine Properties-Datei schreiben.

Dazu nutze ich folgende Funktion vom IZPack:

[XML]<validator
class="com.izforge.izpack.util.PasswordEncryptionValidator" txt="Could not encrypt password." id="key for the error text">
<param name="encryptionKey" value="KEYTEXT"/>
<param name="algorithm" value="Blowfish"/>
</validator>[/XML]

Als Key übergebe ich also "KEYTEST".
Als Passwort habe ich mal password genommen...
Raus kommt: 2ia47itaQumqzIPMCIJmAw==
Ich hab mir den Source angeschaut und ich glaube die codieren erst Blowfish nud dann Base64.
Ich habe es nun auch online versucht zurück zu kodieren aber ich komme einfach nicht auf "password".

Hoffe ihr habt noch eine Idee...
DANKE
 

Noctarius

Top Contributor
Mit einem Blowfish Algo, diesem Wert und dem Keyword rechnen :) Blowfish ist eine symmetrische Verschlüsselung, daher das Keyword.
 

lin83

Mitglied
Hallo Noctarius,

nur mal für mein Verständnis:
Eigentlich muss ich doch jetzt zuerst den Wert aus Base64 zurück decodieren und anschließend den Wert mit Blowfish decodieren, oder?

Ich hatte mir dazu ein paar Beispiele im Net angeschaut es hat aber niemals gelkappt.
Erst dachte ich es liegt an den java Codes aber auch wenn ich online den Code decodiere komme ich nie auf den Wert "password".
 

Noctarius

Top Contributor
Vermutlich, weil du die Zeichen aus dem dekodierten Text (also aus Base64 heraus) gar nicht sauber kopieren kannst, dann Encoding-Problemen. Hast du das mal per Java pur versucht?

edit: Klick *blink*
Also dein Key wird als Byte-Seed verwendet um den echten Key zu erzeugen. Seed heißt hier, dass die Bytes aus deinem String genutzt werden um den Randomizer zu initialisieren. Der echte Key, welcher zum Verschlüsseln genutzt wird, ist erst auf Zeile 101 verfügbar.
 
Zuletzt bearbeitet:

lin83

Mitglied
Nocatrius du bist ein Genie :)

String decoded = new String(new BASE64Decoder().decodeBuffer(encoded),"UTF-8");

DANKE, tausend Danke
 

lin83

Mitglied
Nocatrius du bist ein Genie :)

String decoded = new String(new BASE64Decoder().decodeBuffer(encoded),"UTF-8");

DANKE, tausend Danke

Nocatrius, ein Genie darfst du bleiben :) Aber leider habe ich mich zu früh gefreut...

Java:
import java.io.IOException;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;



public class test {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub

		 String pass = "password";
		 String key = "KEYTEST";
		 
				 
		 System.out.println("Codierter Blowfish ohne Base64: " + encryptBlowfish(pass, key));
		 
		 String encoded = new BASE64Encoder().encode(encryptBlowfish(pass, key).getBytes("UTF-8"));
	     System.out.println("Codierter Base64 vom Blowfish: " + encoded);
	     String decoded = new String(new BASE64Decoder().decodeBuffer(encoded),"UTF-8");
	     System.out.println("Decodierter Base64 vom Base64: " + decoded);
	        
	     System.out.println("Decodierter Blowfish ohne Base64: " + decryptBlowfish(new String(new BASE64Decoder().decodeBuffer(encoded),"UTF-8"), key));   

		
	}
	
	public static String encryptBlowfish(String to_encrypt, String strkey) {
		  try {
		    SecretKeySpec key = new SecretKeySpec(strkey.getBytes(), "Blowfish");
		     Cipher cipher = Cipher.getInstance("Blowfish");
		     cipher.init(Cipher.ENCRYPT_MODE, key);
		     return new String(cipher.doFinal(to_encrypt.getBytes()));
		  } catch (Exception e) { return null; }
		}
		 
		public static String decryptBlowfish(String to_decrypt, String strkey) {
		  try {
		     SecretKeySpec key = new SecretKeySpec(strkey.getBytes(), "Blowfish");
		     Cipher cipher = Cipher.getInstance("Blowfish");
		     cipher.init(Cipher.DECRYPT_MODE, key);
		     byte[] decrypted = cipher.doFinal(to_decrypt.getBytes());
		     return new String(decrypted);
		  } catch (Exception e) { return null; }

		}
	
}

Damit kann ich in Base64 und Blowfish codieren...
Ergebnis:
Code:
Codierter Blowfish ohne Base64: †æÓb\6ÇFîÄاU¤Ü0
Codierter Base64 vom Blowfish: 4oCgw6bDk2JcNsOHRsOuw4TDmMKnVcKkw5ww
Decodierter Base64 vom Base64: †æÓb\6ÇFîÄاU¤Ü0
Decodierter Blowfish ohne Base64: password

Aber eigentlich müsste bei Codierter Base64 vom Blowfish doch "2ia47itaQumqzIPMCIJmAw==" sein oder?
Da ich "2ia47itaQumqzIPMCIJmAw==" auslese und den Keytext habe muss ich doch irgendwie auf "password" kommen..:??? Ich weiß nicht weiter...
 

Noctarius

Top Contributor
Mal versucht die selbe SecretKeySpec Instanz beim Ver-/Entschlüsseln zu nutzen?

PS: Nein er muss nicht mehr dem alten Wert entsprechen oder hast du den alten Base64 irgendwo extern berechnet?
 

lin83

Mitglied
Das ist der originale SourceCode:
Java:
KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
            keygen.init(new SecureRandom(key.getBytes()));
            byte[] keyBytes = keygen.generateKey().getEncoded();
            SecretKeySpec specKey = new SecretKeySpec(keyBytes, algorithm);
            //Initialize the encryption cipher
            encryptCipher = Cipher.getInstance(algorithm);
            encryptCipher.init(Cipher.ENCRYPT_MODE, specKey);

Leider scheitere ich da dran...
Darf ich dich hier um deine Hilfe bitten?
 

Noctarius

Top Contributor
An dieser Stelle wird ein zufälliger Key auf Basis deines Keys als Seed erstellt. In deinem Code nutzt du [c]getBytes("UTF-8")[/c].

Woher hast du den Base64 String von oben?
 

lin83

Mitglied
Hi Noctorius,

ich kann mit IZpack eine Passwortabfrage machen.
Dieses Passwort kann ich anschließend unverschlüsselt oder halt wie oben zu sehen Blowfish mit anschließender Base64 codierung erstellen.

Der Base64 String wird mir also von IZPack erstellt.
Ich muss nur den secret Key noch mitgeben.

Nur das entschlüsseln will bei mir irgendwie nicht...
 

lin83

Mitglied
ok...
Heißt das damit kann ich das nicht entschlüsseln? heißt dass ich muss mir selber etwas zusammenschreiben?

Falls ja frage ich mich was dass für ein zweck hat :)
 

lin83

Mitglied
Hallo,

falls jemand mal vor dem gleichen problem steht :)
Ich habe es endlich geschafft :)))
Ich lade das Passwort aus eine datei und entschlüssel es dann.
Das entschlüsseln hatte zwar bei mir nicht funktioniert, Problem war aber folgendes:
Der Entschlüsselungscode wird wohl mit Informationen des Rechners generiert:
Java:
keygen.init(new SecureRandom(strkey.getBytes()));
Immer wenn ich das in meiner VM gestartet hatte kam der gleiche Key heraus, auf meinem anderen rechner kamm immer ein anderer Wert heraus...

Also mit dem folgenden Code auf der VM probiert und TADAAA :)


Java:
import java.io.FileInputStream;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.Properties;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

public class test {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		Properties props = new Properties();
		props.load(new FileInputStream("conf.properties"));

		String pass = props.getProperty("Password");

		String decoded = new String(new BASE64Decoder().decodeBuffer(pass));
		System.out.println("Decodierter Base64 vom Base64: " + decoded);

		System.out.println("Decodierter Blowfish ohne Base64: "
				+ decryptBlowfish(
						new String(new BASE64Decoder().decodeBuffer(pass)),
						"KEYTEXT"));

	}

	public static String decryptBlowfish(String to_decrypt, String strkey) {
		try {
			KeyGenerator keygen = KeyGenerator.getInstance("Blowfish");

			keygen.init(new SecureRandom(strkey.getBytes()));
			byte[] keyBytes = keygen.generateKey().getEncoded();

			SecretKeySpec key = new SecretKeySpec(keyBytes, "Blowfish");

			Cipher cipher = Cipher.getInstance("Blowfish");

			cipher.init(2, key);
			byte[] decrypted = cipher.doFinal(to_decrypt.getBytes());

			return new String(decrypted);
		} catch (Exception e) {
		}
		return null;

	}

}

@Noctarius
Deine letzten informationen haben mich auf diesen Tipp gebracht...
Also nochmal VIELEN VIELEN DANK
 

Ähnliche Java Themen

Neue Themen


Oben