Hoe maakt u het microcontroller -programma voor het wachtwoordvergrendelingssysteem?

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 // Neem de toetsenbordbibliotheek op

// 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.

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>