Arduino - Passwortvergleich mit Array

Gast #3719805
Lesenswert?
• ▲
▼
Hallo,

ich bastle zurzeit an einem Codeschloss welches mittels Arduino 
realisiert werden soll. Jeder Taster steht für eine Ziffer und wird in 
das PasswortArray2 geschrieben. Ich überlege jetzt aber schon seit ein 
paar Stunden angestrengt wie ich die beiden Arrays auf Gleichheit 
überprüfen könnte doch ich komme einfach nicht drauf..

1
 int PasswortArray[6] = {1,2,3,4,5,6};
2
 int PasswortArray2[6];
3

4
  int zaehler2=0;
5
  int zaehler=0;
6
  int test= 0;
7
  int pineins = 7;
8
  int pinzwei = 6; 
9
  int pindrei = 5;
10
  int pinvier = 4;
11
  int pinfuenf = 3;
12
  int pinsechs = 2;
13
  int absendepin =8;
14
  
15
  int zahlhalter1=0;
16
  int zahlhalter2=0;
17
  int zahlhalter3=0;
18
  int zahlhalter4=0;
19
  int zahlhalter5=0;
20
  int zahlhalter6=0;
21
  
22
  
23
  
24
  int prelltime=200;
25
  int program=0;
26
 
27
  int ledgruen =12;
28
  int ledrot=11;
29

30
  
31
  
32
void setup() {
33
 
34
  pinMode(pineins, INPUT_PULLUP);
35
  pinMode(pinzwei, INPUT_PULLUP);
36
  pinMode(pindrei, INPUT_PULLUP);
37
  pinMode(pinvier, INPUT_PULLUP);
38
  pinMode(pinfuenf, INPUT_PULLUP);
39
  pinMode(pinsechs, INPUT_PULLUP);
40
  pinMode(absendepin, INPUT_PULLUP);
41
  pinMode(ledrot, OUTPUT);
42
  pinMode(ledgruen, OUTPUT);
43
  Serial.begin(9600);
44
 
45
}
46

47
void loop() {
48
  
49
  
50
  //Pinabfrage - Wenn der Button gedrückt wird, wird die gedrückte Ziffer in das Passwortarray2 geschrieben
51
  //Delay um Taster zu entprellen
52
  
53
  if(digitalRead(pineins) == LOW) {
54
      
55
    delay(prelltime);  //Entprellen
56
    PasswortArray2[0]=1;
57
    Serial.println("EINS");
58
      
59
  }   
60
      else if(digitalRead(pinzwei) == LOW) {
61
       delay(prelltime);
62
       PasswortArray2[1]=2;
63
       Serial.println("ZWEI");
64

65
  }
66
  
67
  else if(digitalRead(pindrei) == LOW) {
68
      delay(prelltime);
69
      PasswortArray2[2]=3;
70
      Serial.println("DREI");
71

72
  }
73
  
74
  else if(digitalRead(pinvier) ==LOW) {
75
      delay(prelltime);
76
      PasswortArray2[3]=4;
77
      Serial.println("VIER");
78

79
  }
80
  
81
  else if(digitalRead(pinfuenf) ==LOW){
82
       delay(prelltime);
83
       PasswortArray2[4]=5;
84
        Serial.println("FUENF");
85

86
       
87
  }
88
  
89
  else if(digitalRead(pinsechs)==LOW) {
90
   
91
        delay(prelltime);
92
        PasswortArray2[5]=6;
93
        Serial.println("SECHS");
94

95
  }
96
  
97
  
98
  if(digitalRead(absendepin) == LOW) {
99
    
100
// Hier PIN-Code auf Gleichheit überprüfen    
101

102

103
  }
104
}
Könnte mir jemand ein paar Tipps/Denkanstöße geben?
Gast #3719845
Lesenswert?
• ▲
▼
Einer, der die Vorurteile über Arduinonutzer bestätigt. Das ist noch 
nichtmal böse gemeint, es ist eher interessant. ;-)

Aber zum Thema noch ein kurzer Nachtrag zum Code von Max H.:
1
gleich=1;
2
for(i=0;i<6;i++)
3
{
4
  if(PasswortArray[i]!=PasswortArray2[i])
5
  {
6
    gleich=0;
7
    break;
8
  }
9
}
Da würde ich das break rauslassen, um eine (theoretische) 
Sicherheitslücke zu schließen. Ansonsten könnte man über die 
Durchlaufzeit feststellen, bis zu welcher Stelle das Passwort richtig 
ist.
Das ist hier bei einem Hobbyprojekt sicher nicht notwendig, aber warum 
es nicht mit weniger Aufwand noch ein bisschen besser machen?
Gast #3719866
Lesenswert?
• ▲
▼
Wenn wir bei den theoretischen Sicherheitslücken sind: Änderungen im 
Kontrollfluss sieht man über Strommessung deutlich besser als ein paar 
kippende Bits. Daher würde ich das so machen:
1
ungleich=0;
2
for(i=0;i<6;i++)
3
{
4
  ungleich |= PasswortArray[i] ^ PasswortArray2[i]
5
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.