createTempFile()

Status
Nicht offen für weitere Antworten.

Blade230

Mitglied
Hallo Forum,

ich habe eine verschlüsselte Passwortdatei (eigendlich eine Propertlist mit Einträgen User=Password).
Für den Zugriff möchte ich die Datei temporär öffnen und dann wieder löschen.

Bei der verwirglichung habe ich schwierigkeiten.

Hie ein wenig Code
Code:
 tmpDir= System.getProperty("java.io.tmpdir") + File.separator +"cadmin.tmp" ;
            CCrypto cc = new CCrypto();
 try {
                cc.decryptFile("res" + File.separator + "cadmin.dat",tmpDir , "12345678");
            }

So kann ich die Dtei zwar entschlüsseln, bekomme diese danach aber mit
Code:
File f = new File(tmpDir);
f.delete();
nicht gelöscht.

Tom
 
G

Guest

Gast
Hi meez,

ja die Datei ist vorhanden,
Ich kann dann auch den Usernamen und das Passwort überprüfen und den Login erlauber / verbieten.

Nur das Löschen der Datei aus den Ordner heraus funzt nicht.

Hier mal der ganze Code der Classe:

Code:
package system;
import java.io.*;
import java.util.*;
import java.lang.StringBuffer;

/**
 *
 * @author  ezdqq
 */
public class CCheckLogin {
    
    private char[] Pass;
    private String User,tmpDir,sPass;
    private FrmLogin frml;
    private FrmMain frmm;
    private Thread t;
    private Locale locale;
    private ResourceBundle rb;
    /** Creates a new instance of CCheckLogin */
    public CCheckLogin(char[] p, String u, FrmLogin fml, FrmMain fmm,Locale l) {
        locale = l;
        Pass = p;
        User = u;
        frml = fml;
        frmm = fmm;
        rb = ResourceBundle.getBundle("res" + File.separator +"error",locale);

        if((Pass.length < 1)||(User.length() < 1)) { // Überprüfen der Eingabefelder
            frml.setFalsch();
            FrmError frme = new FrmError(null,true,rb.getString("error_1_t"),rb.getString("error_1_te"));
            t = new Thread(frme);
            t.start(); // Fehler Nicht allses Ausgefüllt
        }
        else {
            tmpDir= System.getProperty("java.io.tmpdir") + File.separator +"cadmin.tmp" ;
            CCrypto cc = new CCrypto();
            try {
                cc.decryptFile("res" + File.separator + "cadmin.dat",tmpDir , "12345678");
            }
            catch(Exception ex) {
                frml.setFalsch();
                FrmError frme = new FrmError(null,true,rb.getString("error_2_t"),rb.getString("error_2_te"));
                t = new Thread(frme);
                t.start(); // Fehler Datei nicht vorhanden
            }
            File f = new File(tmpDir);
            if(f.exists()) {
                CPropertyListe pl = new CPropertyListe(tmpDir,true); //FileInputStrem/ FileOutputStream werden schlossen!!
                Enumeration e = pl.getPropNames();
                for(;e.hasMoreElements();) {
                    if(e.nextElement().toString().equals(User)) {
                        String ptemp = pl.getProperty(User);
                        sPass = new String(Pass);
                        if(ptemp.equals(sPass)) {
                            frml.dispose(); // Login
                            
                            frmm.setMenu(true);
                            killFile(f);
                        }
                        else {
                            frml.setFalsch(); //Falscher User
                            FrmError frme = new FrmError(null,true,rb.getString("error_3_t"),rb.getString("error_3_te"));
                            t = new Thread(frme);
                            t.start();
                            killFile(f);
                        }
                    }
                    else {
                        frml.setFalsch(); // Falsche Passwort
                        FrmError frme = new FrmError(null,true,rb.getString("error_4_t"),rb.getString("error_4_te"));
                        t = new Thread(frme);
                        t.start();
                        killFile(f);
                    }
                }
                
            }
        }
    }
    private void killFile(File f) {
        String s = f.getAbsolutePath();
        System.out.println(s);
        
        boolean b = f.delete();
        System.out.print(b);
    }
    
}

Ich hoffe Du findest den Käfer! ;-)
 

Blade230

Mitglied
Funzt leider auch nicht.

Gibt es die Möglichkeit in Combination von decrypt und createTempFile zu arbeiten und dann mit File.deleteOnExut() das Problem zu beheben?

Mein Gedanke, erstelle Tempfile, entschlüssele Datei IN TempFile, bearbeite TempFile, Verschlüssele TempFile, lösche Tempfile.

Tom
 

meez

Top Contributor
Mach es doch ganz anderst...Anstatt das File zu entschlüsseln und neu zu schreiben,
entschlüssle einfach den InputStream, und halte die Liste im Speicher (Ist ehh sicherer):

Code:
String file = "res" + File.separator + "cadmin.dat";
InputStream in  = cc.decryptStream(new FileInputStream(file), "12345678");
Properties p = new Properties().load(in);

Code:
public InputStream decryptStream(InputStream in, String password) throws Exception {
		Cipher cipher;
		SecretKey key;
		cipher = Cipher.getInstance("DES");
		key = new SecretKeySpec(password.getBytes(), "DES");
		cipher.init(Cipher.DECRYPT_MODE, key);
		return new CipherInputStream(in, cipher);
	}



Danch kannst du über p ja User und Passwortabfragen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M File.createTempFile() Problem Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben