Passwortgültigkeit

Status
Nicht offen für weitere Antworten.
Hallo Leute.

In meinem Programm gibt es die Möglichkeit ein Passwort einzugeben. Das soll gespeichert werden, aber nur wenn es meinen Vorgaben entspricht. (0-9 A-Z a-z) Also darf es keine Sonderzeichen enthalten.

Da ich mich noch nicht mit der Verschlüsselung beschäftigt habe, ist momentan ein eigener "Algorithmus" im Spiel.
Also nicht lachen. :wink:

Hier ist meine Funktion die das Passwort speichern soll:

Code:
	// Passwort in der Textdatei speichern
	public void SavePassToFile(String pass)
	{
		try
		{
			System.out.println("***\nPasswort: " + pass + "\n***");
			char p[] = pass.toCharArray();	// String pass in char-Array umwandeln
			
			if(checkPassValidity(p))  // Aufruf der Gültigkeitsabfrage
			{
				System.out.println(pass);
				mf.fw = new FileWriter(mf.filePass);
				
				for(int i = 0; i < p.length; i++)
				{
					mf.fw.write(p[i]-20);
					System.out.println("p["+i+"]= "+ p[i]+ "  p["+i+"]-20= "+(char)(p[i]-20));
				}
				mf.fw.close();
				System.out.println("***\nPasswort wurde gespeichert\n***");
			}
			else
				System.out.println("***\nPasswort enthält ungültige Zeichen\n***");
		}
		catch (Exception e)
		{
			System.err.println("Fehler: " + e.getMessage());
		}
	}


Hier meine Methode zum überprüfen des gesamten char-Arrays:

Code:
	public boolean checkPassValidity(char p[])
	{
		char cTemp;
		
		for(int i = 0; i < p.length; i++)
		{
			cTemp = p[i];
			if(isForbiddenChar(cTemp))
				return false;
		}
		
		return true;
	}


Und die Methode zum Überprüfen einzelner Zeichen, ob diese sich im Gültigkeitsbereich befinden:

Code:
	public boolean isForbiddenChar(char cTemp)
	{
		char c = cTemp;
		if( c > 47 && c < 123 )
		{
			switch ( c )
			{
				// Zeichen zwischen Zahlen und Großbuchstaben
				case 58: return false;
				case 59: return false;
				case 60: return false;
				case 61: return false;
				case 62: return false;
				case 63: return false;
				case 64: return false; 
				
				// Zeichen zwischen Groß- und Kleinbuchstaben
				case 91: return false;
				case 92: return false;
				case 93: return false;
				case 94: return false;
				case 95: return false;
				case 96: return false;
				
				default: return true;
			}
			
		}
		else
			return false;
	}

Keine Ahnung ob das überhaupt geht :bahnhof:

Ich habe schon aus dem JPasswortField sowohl mit getText() [=Deprecated] als auch mit getPassword() ausgelesen.
Eine Kontrollausgabe gab mir bei getText() den richtigen String aus, bei getPassword() aber nur irgendwelche kryptischen Zeichen (trotz .toString()). :(

Hier der Aufruf:

Code:
	public void getServerDataAndSave()
	{
		mf.sTargetPass = pfTargetPass.getPassword().toString().trim();    // <--- so ????
		//mf.sTargetPass = pfTargetPass.getText().trim();                        // <--- oder so ????
		mf.SavePassToFile(mf.sTargetPass);
	}

Liegt das jetzt an dem JPasswortField-Problem oder ist meine Logik bei der Gültigkeitsprüfung für'n A***h ???? :bahnhof:

Bitte helft mir, auch wenn ich euch mit Code zubombe... :wink:

CU Olli
 

Isaac

Bekanntes Mitglied
pfTargetPass.getPassword().toString().trim();

Überleg mal was toString hier liefert und auf was du es aufrufst. Dann kommst du dem Rätzel näher. Kleiner Tip, das Kryptische ist das Objekt in Textform.
 
OK.

Hast ja recht... :oops:

Danke für den Wink mit dem ganzen Zaun, anstatt nur mit dem Zaunpfahl... :lol:
Ist klar das er mir so etwas kryptisches ausgibt.

Hab jetzt eine Funktion, die das ganze umwandelt. Die funktioniert auch. Ausgabe ist OK.

Aber leider sagt er mir bei Eingabe von z.B. "hallo" als Passwort, das diese Eingabe ungültig ist.
Also wohl doch ein Logik-Fehler in der Gültigkeits-Kontrolle. :?


[schild=13 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]PLEASE HELP...[/schild]


CU Olli
 
Erst mal THX @Isaac...


Kurz mal vorweg...

Ich hab in meiner Methode zum Speichern aus:

Code:
if(checkPassValidity(p))  // Aufruf der Gültigkeitsabfrage


mal das hier:

Code:
if(!checkPassValidity(p)) // Aufruf der Gültigkeitsabfrage


gemacht. Jetzt funktionierts. Auch wenn ich noch nicht dahintergestiegen bin warum... :bahnhof: ???:L

Das mit den RegEx werde ich mir auf jeden Fall auch noch anschauen, aber hier ist eindeutig ein Logikproblem am Werke. Und das würde ich gerne lösen (verstehen)... :wink:

Also erst mal so am Laufen kriegen und dann schauen ob's einfacher geht...

Vielleicht kann doch noch mal einer über meinen "Quältext" :wink: drüberfliegen


CU Olli
 

Isaac

Bekanntes Mitglied
Naja du hast eine doppelte Verneinung in deiner Logik.

if(isForbiddenChar(cTemp))

sollte ja eigentlich true sein wenn der Char verboten ist. Aber die Methode liefert false für verbotene chars. Sprich, ist true für alle richitigen chars. Wodurch dann false zurückgegeben wird. Mit deinem ! negierst du das wieder zurück.
 
@Isaac:

BIG THX...

Ja ich denke halt gerne um zehn Ecken und versuche mir auch öfter von hinten durchs Knie ins Auge zu schießen. :lol:

Ne... mal im Ernst. Um auf die RegEx zurückzukommen. Den Sinn dahinter habe ich verstanden, nur mit der Umsetzung haperts noch etwas. Ich habe folgendes probiert:

Code:
...
if(pass.matches("[0-9A-Za-z]"))
...


und das hier auch:
Code:
...
if(pass.matches("\b[0-9A-Za-z]"))
...


Beides leider ohne Erfolg.

Ist die Prüfung nach den Zeichen richtig??? Wie aber überprüfe ich den ganzen String??? Bei der oberen Variante überprüft er ja schließlich nur ein einziges Zeichen. Wie kann ich das auf den String anwenden.

Evtl. mit * ???? ???:L

Danke schonmal für die Hilfe und Sorry für kaputte Nerven :wink: , würds halt gern verstehen...

CU Olli
 
R

Roar

Gast
so:
Code:
String pattern = "\\w+";
das reicht eigentlich
 
Vielen Dank an ROAR und an ISAAC !!!!!!!!!!!!! :applaus:

Es funktionert jetzt sogar auf beide Arten... :D :D :D

@Roar:
OK. Im Grunde schon, aber das beinhaltet den Unterstrich (soweit ich das richtig :### habe), und den wollte ich auch ausschließen.


Also für alle die Lösung für ein Passwort das nur alphanumerisch sein darf:

Code:
...
final String sREGEX = "^[0-9A-Za-z]+";
private String pass;
...
...
if(pass.matches(sREGEX))
{
    doSomething(blahblah);
}
...

Also nochmal Danke an euch zwei. [schild=4 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Ich schmeiß 'ne Runde Bier...[/schild]

CU Olli
 
Status
Nicht offen für weitere Antworten.

Oben