Selectiver Ascii-Zugriff mit Random



  • Hallo;

    ich möchte gern für einen Passwortgenerator selektiv auf die ASCII-Tabelle zugreifen.
    Selektiv soll heissen, dass der User per Checkbox auswählen können soll, ob das PW nur aus Zahlen, aus Text, aus Zeichen, oder aus deren Kombinationen bestehen soll. (Vorgabewert ist: alles gewählt)
    Darüber hinaus soll per Radiobutton auch noch case-sensitivity ausgewählt werden können. Also ein zusätzlicher Bereich der ASCII-Tabelle.

    Mit Random und Next kann ich Obergrenze und Untergrenze des Zahlenbereiches angeben.
    Dummerweise liegen aber Zeichen und Text nicht in einem durchgängigen Zahlenbereich der ASCII-Tabelle.
    Wie kann ich der Random-Funktion angeben, das sie kombinierte "Bereiche" aus der Tabelle nutzen soll?

    Für eine Idee incl. Codebeispiel wäre ich sehr dankbar!

    Gruß, Ahmadine

    Das habe ich bis jetzt im Code:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    {
    int i;
    bool zahlen, text, zeichen, grossklein = true;
    if (this->cb_Zahlen->Checked) zahlen=false;
    if (this->cb_Text->Checked) text=false;
    if (this->cb_Zeichen->Checked) zeichen=false;
    array<int> ^passwort = gcnew array<int>(8);
    Random ^pwort = gcnew Random();
    //Textbox leeren vor einem Neustart//
    tb_1->Text="";
    for (i=0; i<8; i++)
       {
            if (zahlen, text, zeichen)
    	{
    	   passwort[i] = pwort->Next(32,127);
    	   //annähernd die ganze Tabelle//
               tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    	}
    	if (zahlen)
    	{
    	   passwort[i] = pwort->Next(47,57);
    	   //nur der Zahlenbereich//
               tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    	}
    	/*if (text)
    	{
    	   passwort[i] = pwort->Next(64,90&&97,122);
    	   //Gross-und Kleinschreibung geht schon nicht mehr//
               tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    	}
    	if (zeichen)
    	{
    	   passwort[i] = pwort->Next(32,47&&57,64&&90,96&&123,125);
    	   tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    	}
            Das funktioniert leider nicht*/
    }
    


  • Stopf die Auswahlbuchstaben je nach Auswahl in einen String wie "abcdefghijklmnopqrstuvwxyzäöüßABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß+-*/()/&%$§"!@#~@€,;.:-<>|{[]}\?" und mach Randdom über die Srtinglänge, um einzelne Buchstaben herauszuziehen.



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielen Dank für Deine Idee.
    Daran hatte ich auch schon mal gedacht, weiß aber leider nicht wie ich den Part "und mach Random über die Stringlänge" umsetzen soll
    und schon gleich gar nicht wie ich dann den Part case-sensitivität einbringen könnte. 😕

    Ich bin absoluter Anfänger und stopsele mich so durch.....

    Ich bitte um Nachsicht 🙄

    Gruß, Ahmadine



  • //völlig ungetestet
    passwort[i] = buchstaben[pwort->Next(0,buchstaben->Length)];
    

    und buchstaben ist "abcdefghijklmnopqrstuvwxyz" oder "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", je nachdem, was der Benutzer für einen Zeichensatz ausgewählt hat.



  • Vielen Dank für die Anregungen.
    Das hat zwar leider nicht funktioniert, aber ich habe es inzwischen mit einer switch Anweisung und Arrays hinbekommen.

    Hier der Code für die, die es interessiert:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			int i, auswahl;
    			bool zahlen, text, zeichen, grossklein = false;
    			if (this->cb_Zahlen->Checked) zahlen=true;
    			if (this->cb_Text->Checked) text=true;
    			if (this->cb_Zeichen->Checked) zeichen=true;
    			if (this->cb_GrossKlein->Checked) grossklein=true;
    
    			if (zahlen) auswahl = 1;
    			if (text) auswahl = 2;
    			if (zeichen) auswahl = 3;
    			if (grossklein) auswahl = 4;
    			if (zahlen && text) auswahl = 5;
    			if (zahlen && text && grossklein) auswahl = 6;
    			if (zahlen && zeichen) auswahl = 7;
    			if (zahlen && text && zeichen) auswahl = 8;
    
    			char kleinBuchstaben[27] = "abcdefghijklmnopqrstuvwxyz";
    			char ziffern[11] = "1234567890";
    			char sonderZeichen[31] = "!#$%&()*+,-./:;<=>?@[\]^{}~_°§";
    			char buchStaben[53] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    			char kleinZiffern[37] = "abcdefghijklmnopqrstuvwxyz1234567890";
    			char kleinGrossZiffern[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    			char zeichenZiffern[41] = "!#$%&()*+,-./:;<=>?@[\]^{}~_°§1234567890";
    			char kleinZeichenZiffern[67] = "abcdefghijklmnopqrstuvwxyz!#$%&()*+,-./:;<=>?@[\]^{}~_°§1234567890";
    			char kleinGrossZeichenZiffern[93] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+,-./:;<=>?@[\]^{}~_°§1234567890";
    
    			array<int> ^passwort = gcnew array<int>(8);
    			Random ^pwort = gcnew Random();
    			tb_1->Text="";
    			for (i=0; i<8; i++)
    				{
    					switch (auswahl)
    						{
    							case 1 : //nur Zahlen
    							passwort[i] = ziffern[pwort->Next(0,9)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 2: //nur Kleinbuchstaben
    							passwort[i] = kleinBuchstaben[pwort->Next(0,25)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 3: //nur Zeichen
    							passwort[i] = sonderZeichen[pwort->Next(0,29)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 4: //Groß- Kleinschreibung beachten
    							passwort[i] = buchStaben[pwort->Next(0,51)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 5: //Zahlen und Kleinbuchstaben
    							passwort[i] = kleinZiffern[pwort->Next(0,35)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 6: //Zahlen und Buchstaben (Groß- Kleinschreibung beachten)
    							passwort[i] = kleinGrossZiffern[pwort->Next(0,61)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 7: //Zahlen und Zeichen
    							passwort[i] = zeichenZiffern[pwort->Next(0,39)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							case 8: //Kleinbuchstaben, Zahlen und Zeichen
    							passwort[i] = kleinZeichenZiffern[pwort->Next(0,65)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    							break;
    
    							default:
    							passwort[i] = kleinGrossZeichenZiffern[pwort->Next(0,91)];
    							tb_1->Text += Convert::ToChar(passwort[i]).ToString();
    						}
    				}
    		}
    

    Jetzt habe ich aber schon wieder ein neues Problem, welches ich nicht lösen kann. Das schreibe ich aber in einem anderen thread.

    Viele Bity&Bytes, Ahmadine


Anmelden zum Antworten