www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Passwort programmieren


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen

Ich will in c ein kleines Passwort programmieren.

Ich springe durch einen Tastendruck auf der Matrixtastatur in eine
Funktion.
Diese Funktion soll erst wieder verlassen werden, wenn 4 Zahlen in der
richtigen Reihenfolge gedrückt werden.

Hat jemand ein Beispielprogramm?
Es sollte einwenig schwer sein den Code zu knacken, also man sollte
nicht einfach alle Tasten ein paar mal durchrattern lassen und hat
diesen schon geknackt.
Fort Know muss er aber auch nicht gerade beschützen ;o)

Für weitere Fragen bin ich stehts offen...

Danke

Gruss Tom

Autor: Division (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na das ja nich so wild....

ich würde das zwar etwas anders machen, aber warum nicht so.

Wie wäre es mit einer 4fach verschachtelten if abfrage, und in der
letzen wird erst was auch immer geschaltet.
In den einzelnen ifabfragen musst du dann natürlich abbruchbedingungen
einbauen, das bei einer falschen zahl wieder von vorne angefangen
werden muss.

Liebe Grüsse

Autor: Johannes M. Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn bei jeder If-Abfrage bei jeder falschen Zahl gleich abgebrochen
wird, dann hat man das Passwort ja mit max. 40x ausprobieren draussen,
wenn ich's richtig verstanden habe. D.h. geprueft werden darf erst
nach der Eingabe aller 4 Zahlen.
Oder man gibt keinen Abbruch in die If-Abfrage, sondern setzt nur ein
flag, das am Ende ausgewertet wird. Oder so..

Autor: manni72 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
von dem abbruch merkt der benutzer doch nichts. also gibt es doch 1000
verschiedene möglichkeiten.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Hilfe...
Bin nun selbst auf eine gute Lösung gekommen.

Gruss Tom

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erst alle 4 zahlen einlesen und danach vergleichen. nach 3 fehlversuchen
eingabe für 1 minute sperren. hilft gegen zu viel ausprobieren

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst schon nach jeder Ziffer vergleichen, musst dann aber einen
Zähler mitlaufen lassen, der weiß, welche Ziffer eingegeben wurde /
welche die nächste ist.
Wenn eine falsche dabei ist, wird der Zähler zurückgesetzt.
Wenn 4/5 erreicht ist, war der Code richtig.

Wenn das die einzige Funktion sein soll: siehe Codeschloß-ICs LS7220  /
LS7222   LS7223  LS7225 / LS7226.
www.lsicsi.com/pdfs/LS7220.pdf
http://www.lsicsi.com/products_files/body_products...

manni72:
Wieso 1000? 10^4=10000 (0000-9999)
Aber LS7220 hat 5040. Fällt mir gerade nicht ein, wie man darauf kommt,
hat aber mit der Kombinatorik zu tun.

Autor: Zotteljedi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5040 ist 4 Ziffern aus 0..9 ohne "Zurücklegen", d.h. jede darf nur
einmal vorkommen. Am Anfang hast Du 10 Möglichkeiten, beim zweiten
Tastendruck nur noch 9 (weil eine ja schon gedrückt wurde), 8, 7. Macht
10  9  8 * 7 = 5040.

Autor: FranzK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Zurücklegen ist aber doch recht unsinnig!
Warum darf das Passwort nicht 4444 oder 1232 sein?
Mit "zurücklegen sind mehr Kombinationen möglich und damit ist das
Ganze sicherer.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seh ich auch so. wäre ziemlich sinnlos das nicht zu erlauben. ist vor
allem kein mehraufwand bei der implementierung

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau Zotteljedi, du hast Recht!
Das hat speziell mit diesem IC zu tun, weil die 4 Tasten, die den Code
beinhalten, auf 4 Pins gehen, und die nicht benutzten auf Reset.
Damit die korrekte Reihenfolge getestet werden kann, darf eine Taste
nur auf genau ein Pin gehen.
Jede Ziffer darf in Code max. 1mal vorkommen.

Autor: manni72 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@profi:

ja, sorry, meinte natürlich 10000

Autor: Schueler :) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn nun jemand eine passende Programmierung,die er mal freigeben 
könnte?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schueler :) wrote:
> Hat denn nun jemand eine passende Programmierung,die er mal freigeben
> könnte?

Wo ist das Problem?
Auf 4 Tastendrücke warten und 4 Vergleiche.
Das Komplizierteste dran dürfte das Auswerten der Tastendrücke sein,
weil es dafür mehrere Möglichkeiten gibt, wenn man es sauber
mit Tastenentprellung machen möchte.
Ein zusätzlicher Timeout wäre nicht schlecht, damit ein Benutzerabbruch
nach einer der ersten Tastendrücke das System nicht in einem
Zwischenzustand für den nächsten Benutzer hinterlässt.

Also PseudoCode

void WaitPwd()
{
  int Key[4];

  do {
    Rückmeldung_auf_Enter_PW();
    TimeOut_rücksetzen();

    i = 0;
    while( i < 4 ) {
      if( Key_Pressed() ) {
        Key[i] = Get_Key_Press();
        i = i + 1;
        TimeOut_rücksetzen();
      }

      if( TimeOut() )
        i = 0;
    }

  } while( Key[0] != Erste_PW_Key   ||
           Key[1] != Zweiter_PW_Key ||
           Key[2] != Dritter_PW_Key ||
           Key[3] != Vierter_PW_Key );

  Rückmeldung_Enter_PW_löschen();
}

Lass deiner Phanatsie freien Lauf, da kann man noch viel
verändern, aber die Grundstruktur ist immer: Warte auf
n Tastendrücke, Vergleiche ob es die richtigen waren.

Autor: Michael K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Lösung:

uint8_t PW[4] = {1, 2, 3, 4};

uint8_t CheckPW (uint8_t PressedNumber)
{
  static uint8_t PWIndex = 0;

  if (PressedNumber == PW[PWIndex])
  {
    PWIndex++;
    if (PWIndex >= 4)
    {
      PWIndex = 0;
      return 1;
    }
  }
  else
    PWIndex = 0;

  return 0;
}

Die Funktion CheckPW immer dann aufrufen, wenn eine Taste gedrückt 
wurde. Der Rückgabewert ist nur dann 1 wenn die Kombination richtig 
eingegeben wurde.

Grüße,
Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.