Chiper: DES Verschlüsslung->Entschlüsslungsproblem

Status
Nicht offen für weitere Antworten.

Kaffeebohne

Bekanntes Mitglied
Code:
public class Encryption {
    
    private String password;
    private String buffer;
    private String data;
    private byte[] dataBuffer;
    private String algorithm;
    private String result;
    

    /** Creates a new instance of Encryption */
    public Encryption(String algo) {
        result = new String();
        setAlgorithm(algo);
    }
    
    public void setPassword(String pass) {
        if(algorithm.equals("DES")) {
            pass = pass.substring(0, 8);
        }
        password = pass;
    }
    
    private void setAlgorithm(String algo) {
        algorithm = algo;
    }
    
    public String decode(String data) {
        this.data = data;
        if(algorithm.equals("DES")) {
            decodeDes();
        }
        return result;
    }
    
    public String encode(String data) {
        this.data = data;
        if(algorithm.equals("DES")) {
            encodeDes();
        }
        return result;
    }
    
    private void encodeDes() {
        try {

            Cipher cipher = Cipher.getInstance("DES");
            Key key =  new SecretKeySpec(password.getBytes(), "DES");
            cipher.init(Cipher.ENCRYPT_MODE, key);      
            byte[] encoded = cipher.doFinal(data.getBytes());
            result = new String(encoded);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private void decodeDes() {
        try {
            
            Cipher cipher = Cipher.getInstance("DES");
            Key key =  new SecretKeySpec(password.getBytes(), "DES");
            cipher.init(Cipher.DECRYPT_MODE, key);  
            byte[] encoded = cipher.doFinal(data.getBytes());
            result = new String(encoded);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

Code:
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        String test = "1234567810";
        String pass = "foobarfo";
        
        
        Encryption en = new Encryption("DES");
        en.setPassword(pass);
        String testCrypt = en.encode(test);
        
        System.out.println(testCrypt);
        System.out.println(en.decode(testCrypt));    



        
    }
    
}


Heraus kommt:
÷? ‡‘KÀô Ø50þXðê
³çE«NVù10

Ich verstehe das nicht, hab auch versucht mit dem Debugger den Käfer zu finden. Leider komme ich nicht drauf...
 

Bleiglanz

Gesperrter Benutzer
1. gib bei new String ein Character Encoding an, zur Sicherheit...

2. ebenso bei getBytes auf einem String

könnte ein padding problem sein, du rufst ja decode nicht auf dem ursprünglichen byte[] auf, sondern hast das ganze einmal durch

new String(byte[]).toByteArray()

gejagt (beide Methoden sind deprecated...)
 

mic_checker

Top Contributor
Hast du es mal mit einem Padding Verfahren probiert?

Wenn das das Problem wäre sollte er aber eigentlich auch gar nicht erst kompilieren, bzw. ne Exception schmeissen.

Was anderes:
Warum verwendest du keine PBE (Password Based Encryption) ? Sollte wohl in die Richtung gehen was du vor hast....

Davon abgesehen sollten Passwörter nicht in Strings, sondern in einem char Array gespeichert werden.
 

Kaffeebohne

Bekanntes Mitglied
@DP
Nein, hatte leider momentan nicht die Zeit.

@Bleiglanz
1. Werd ich mal ausprobieren
2. Javaapi sagt das aber nur bei void getBytes


@ mic checker
Padding? Ist das die Geschichte mit dem vielfachen von acht?
Ich verwende kein PBE, weil ich die Klasse zum chiphrieren von Strings verwenden will.
Dann kann ich es für alles mögliche verwenden. Ausserdem kommt noch Base64, XOR, ROT usw. dazu.
 

mic_checker

Top Contributor
Mit Padding meine ich das du dich nicht selber drum kümmern musst das deine Daten die gewünschte Länge haben, du kannst praktisch entsprechend "auffüllen".

Allerdings sollte er ne Exception schmeissen falls das die Ursache ist, aber das macht er bei dir ja nicht....
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben