Hier is een handleiding voor het maken van een microcontroller -programma voor een wachtwoordvergrendelingssysteem, samen met codevoorbeelden (in c) en overwegingen:
1. Hardware -installatie
* Microcontroller: Kies een microcontroller die aan uw behoeften voldoet. Populaire keuzes zijn onder meer:
* arduino: Gemakkelijk te gebruiken, veel bibliotheken, geweldig voor beginners.
* STM32: Krachtig, veelzijdig en algemeen ondersteund.
* PIC -microcontrollers: Langdurig platform met een grote gemeenschap.
* invoer: U hebt een manier nodig om het wachtwoord in te voeren:
* toetsenbord: Een 4×4 of soortgelijk matrixtoetsenbord is gebruikelijk.
* knoppen: Gebruik individuele knoppen voor elk cijfer.
* Rotary Encoder: Zorgt voor eenvoudiger wachtwoordinvoer.
* Uitvoer: U hebt een manier nodig om succes/falen aan te geven:
* LED: Een groene led voor succes, een rode led voor mislukking.
* zoemer: Geef een hoorbaar signaal voor de vergrendelstatus.
* Solenoïde: Om een slot fysiek te openen (als u een mechanische slot gebruikt).
* Power Bron: Kies een geschikte stroombron voor uw microcontroller en randapparatuur.
2. Programmeerlogica
* Wachtwoordopslag:
* Hard gecodeerd: Steed het wachtwoord rechtstreeks op in uw code. Eenvoudig, maar niet erg veilig.
* EEPROM: Gebruik een externe EEPROM -chip om het wachtwoord op te slaan voor meer flexibiliteit.
* Veilige opslag: (Geavanceerd) Gebruik voor meer beveiliging een veilig element zoals een cryptografische module.
* Wachtwoordinvoer:
* toetsenbord: Gebruik een bibliotheek- of aangepaste code om ingangen te lezen van een matrixtoetsenbord.
* knoppen: Gebruik de ontslagtechnieken om te voorkomen dat meerdere ingangen van een enkele pers.
* Rotary Encoder: Track Encoder Position Wijzigingen om cijfers weer te geven.
* wachtwoordverificatie:
* Vergelijk invoer met opgeslagen wachtwoord: Cijfer per cijfer, vergelijk het ingevoerde wachtwoord met het opgeslagen wachtwoord.
* succes/falen: Als de wachtwoorden overeenkomen, activeer dan een succesuitvoer. Als ze dat niet doen, activeer dan een faaluitgang.
* extra functies (optioneel):
* Aantal pogingen: Beperk onjuiste pogingen om brute-force-aanvallen te voorkomen.
* Wachtwoordwijzingsfunctie: Implementeer een manier om het wachtwoord te wijzigen (bij gebruik van EEPROM of veilige opslag).
* Tijdvertraging: Vertrek het antwoord van het slot na onjuiste vermeldingen om snelle pogingen te voorkomen.
3. CODE VOORBEELD (ARDUINO)
“ `C ++
#include
// toetsinstelling
const byte rijen =4; // Aantal rijen op het toetsenbord
const byte cols =4; // Aantal kolommen op het toetsenbord
char keys [rijen] [cols] ={
{’1′, ’2′, ’3′, ‘a’},
{’4′, ’5′, ’6′, ‘b’},
{’7′, ’8′, ’9′, ‘C’},
{‘*’, ’0′, ‘#’, ‘D’}
};
byte rowpins [rijen] ={9, 8, 7, 6}; // Maak verbinding met toetsenbakken rijen
byte colpins [cols] ={5, 4, 3, 2}; // Maak verbinding met toetsenbordkolommen
Toetsenbord toetsenbord =toetsenbord (MakeKeyMap (sleutels), rowpins, colpins, rijen, cols);
// Definieer LED -pinnen
const int ledgreen =13;
const int ledred =12;
// Definieer wachtwoord
const char *wachtwoord =”1234″; // Bewaar het wachtwoord rechtstreeks in code
// … of gebruik EEPROM om het wachtwoord op te slaan (zie opmerkingen)
char inputPassword [5] =”"; // om het ingevoerde wachtwoord op te slaan
int wachtwoordindex =0; // Index voor het invoerwachtwoord
void setup () {
pinmode (ledgreen, output);
pinmode (ledred, output);
Serie.begin (9600); // voor foutopsporing
}
void loop () {
char key =keypad.getKey ();
if (key) {
Serial.print (sleutel);
// verwerken sleutels en controleer het wachtwoord:
if (key> =’0′ &&key <='9') {// staat alleen cijfers toe
InputPassword [wachtwoordindex ++] =key;
if (wachtwoordindex ==strlen (wachtwoord)) {// volledig ingevoerde wachtwoord
checkPassword ();
}
} anders if (key ==’#’ &&wachtwoordindex> 0) {// Reset wachtwoordinvoer
wachtwoordindex =0;
Serial.println (“wachtwoordreset”);
} anders if (key ==’*’ &&wachtwoordindex> 0) {// backspace
InputPassword [-wachtwoordindex] =0;
}
}
}
void checkPassword () {
if (strcmp (inputPassword, wachtwoord) ==0) {
DigitalWrite (Ledgreen, High);
DigitalWrite (Ledred, Low);
Serial.println (“wachtwoord geaccepteerd”);
// … Open het slot (indien van toepassing)
vertraging (1000); // Vertraging voor visuele indicatie
DigitalWrite (Ledgreen, Low);
} else {
DigitalWrite (Ledred, High);
DigitalWrite (Ledgreen, Low);
Serial.println (“onjuist wachtwoord”);
// … geluid de zoemer (indien van toepassing)
vertraging (1000); // Vertraging voor visuele indicatie
DigitalWrite (Ledred, Low);
wachtwoordindex =0; // reset voor de volgende poging
}
}
“ `
Belangrijke overwegingen:
* Beveiliging: Dit is een eenvoudig wachtwoordvergrendelingssysteem. Overweeg voor meer beveiliging:
* hashing: Hash het opgeslagen wachtwoord om het moeilijker te maken om te kraken.
* Zouten: Voeg een willekeurige waarde (zout) toe aan het wachtwoord voordat u hasht.
* Veilig element: Gebruik een beveiligd element (zoals een cryptografische module) voor meer robuuste wachtwoordbeveiliging.
* EEPROM -gebruik (voor het wijzigen van wachtwoorden):
* lezen: Gebruik de functie `eeprom.read ()` om het wachtwoord van EEPROM op te halen.
* schrijven: Gebruik de functie `eeprom.write ()` om het wachtwoord in EEPROM bij te werken.
* Debugging: Gebruik seriële monitor om foutopsporingsinformatie af te drukken.
* Foutafhandeling: Foutafhandeling implementeren voor situaties zoals:
* Ongeldige toets drukt op
* EEPROM LEZEN/WRITE fouten
Onthoud:
* Gebruik altijd beveiligde programmeerpraktijken om uw systeem te beschermen tegen aanvallen.
* Test uw code grondig om ervoor te zorgen dat het correct functioneert.
* Documenteer uw code voor toekomstige referentie en onderhoud.