Вы работаете над проектом Arduino и хотите добавить дополнительный уровень безопасности? Одним из эффективных способов добиться этого является внедрение системы защиты паролем с использованием клавиатуры. В этой статье мы рассмотрим несколько способов добиться этого, предоставив вам примеры кода и простые инструкции. Давайте погрузимся!
Метод 1: базовая проверка пароля
Давайте начнем с простого метода, который проверяет заранее заданный пароль с помощью клавиатуры. В этом примере мы возьмем 4-значный цифровой пароль. Вот код:
#include <Keypad.h>
const int ROWS = 4;
const int COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Predefined password
char password[] = "1234";
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
// Check if the entered key matches the password
if (key == '#') {
if (strcmp(password, enteredPassword) == 0) {
// Password is correct, perform the desired action
Serial.println("Access granted!");
} else {
// Password is incorrect
Serial.println("Access denied!");
}
// Reset the entered password
enteredPassword = "";
} else {
// Append the entered key to the password
enteredPassword += key;
}
}
}
Объяснение:
Этот метод использует библиотеку Keypadдля взаимодействия с клавиатурой. Мы определяем раскладку клавиатуры, контакты строк и столбцов. Функция loop()постоянно проверяет нажатия клавиш. Когда пользователь вводит ключ, он добавляется к переменной enteredPassword. Если пользователь нажимает «#», введенный пароль сравнивается с заранее заданным паролем. Если они совпадают, «Доступ разрешен!» печатается; в противном случае «Доступ запрещен!» отображается.
Метод 2: проверка пароля по времени
Другой подход — включить проверку пароля по времени. Этот метод требует от пользователя ввода кода, который периодически меняется в зависимости от времени. Вот пример использования библиотеки Time:
#include <Keypad.h>
#include <TimeLib.h>
const int ROWS = 4;
const int COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Secret key seed
unsigned long secretKeySeed = 12345678;
void setup() {
Serial.begin(9600);
setTime(0, 0, 0, 1, 1, 2000); // Set initial time
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') {
unsigned long currentTime = now();
unsigned long secretKey = secretKeySeed + (currentTime / 30); // Generate time-based secret key
// Verify the entered key against the generated secret key
if (keypadState() == secretKey) {
// Password is correct, perform the desired action
Serial.println("Access granted!");
} else {
// Password is incorrect
Serial.println("Access denied!");
}
}
}
}
unsigned long keypadState() {
unsigned long state = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
state += analogRead(i * 4 + j);
}
}
return state;
}
Объяснение:
В этом методе мы вводим элемент, основанный на времени, в процесс проверки пароля. Начальное значение секретного ключа объединяется с текущим временем для создания уникального секретного ключа, который меняется каждые 30 секунд. Функция keypadState()вычисляет значение на основе аналоговых показаний клавиатуры для создания уникального состояния. Это состояние сравнивается с сгенерированным секретным ключом, чтобы определить правильность введенного пароля.
Включив защиту паролем с помощью клавиатуры, вы можете повысить безопасность своих проектов Arduino. В этой статье мы рассмотрели два метода: базовую проверку пароля и проверку пароля по времени. В зависимости от требований вашего проекта вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Помните, что безопасность имеет решающее значение, и эти методы обеспечивают прочную основу для защиты ваших проектов Arduino от несанкционированного доступа.