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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren