До сих пор пользователи популярных десктопных операционных систем не имели иной возможности входа в ОС, кроме как ввод пароля. Хватит это терпеть! Пора брать в руки паяльник и сделать процедуру аутентификации сравнимой по простоте с поглаживанием своего кота.
Сегодня в рубрике DIY мы поделимся подсмотренным на Instructables способом ввода пароля для входа в ОС с помощью NFC-карты.
Шаг 1: детали
Нам понадобятся:
- Arduino Leonardo
- Adafriut NFC Shield
- NFC карта (идёт в комплекте с Adafriut NFC Shield)
- небольшой кусочек провода
- острый нож
- припой
- инструмент для обрезки и зачистки проводов
- компьютер
- кабель micro-USB
Шаг 2: железо
Процедура создания аппаратного модуля крайне проста.
Единственная модификация, требующаяся для работы устройства, заключается в разрыве цепи между pin IRQ и pin 2. Для этого и пригодится нож.
Потом потребуется соединить IRQ и 6 пины с помощью провода.
Проверить отсутствие/наличие контакта можно с помощью мультиметра, а для более ясного понимания процедуры сборки Leonardo и NFC-модуля предлагаем вот этот короткий видеоролик. Тут всё показано по шагам и очень наглядно:
Шаг 3: программное обеспечение
Ниже представлен код, который необходимо залить в Arduino. Перед началом загрузки нужно убедиться, что установлена библиотека Adafruit NFC. Подробнее о ней здесь.
#include
#include <Adafruit_NFCShield_I2C.h>
#define IRQ 6 // this trace must be cut and rewired!
#define RESET 8
Adafruit_NFCShield_I2C nfc(IRQ, RESET);
//////////////////////////////////// SETUP
void setup() {
// set up Serial library at 9600 bps
Serial.begin(9600);
// find Adafruit RFID/NFC shield
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
// configure board to read RFID tags
nfc.SAMConfig();
Keyboard.begin(); //initiate the Keyboard
}
/////////////////////////////////// LOOP
unsigned digit = 0;
void loop() {
uint8_t success;
uint8_t uid [] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
// wait for RFID card to show up!
Serial.println("Waiting for an ISO14443A Card ...");
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
uint32_t cardidentifier = 0;
if (success) {
// Found a card!
Serial.print("Card detected #");
// turn the four byte UID of a mifare classic into a single variable #
cardidentifier = uid [3] ;
cardidentifier <<= 8; cardidentifier |= uid [2] ;
cardidentifier <<= 8; cardidentifier |= uid [1] ;
cardidentifier <<= 8; cardidentifier |= uid [0] ;
Serial.println(cardidentifier);
if (cardidentifier == 606061173) {
Keyboard.write('m');
Keyboard.write('y');
Keyboard.write('p');
Keyboard.write('a');
Keyboard.write('s');
Keyboard.write('s');
Keyboard.write('w');
Keyboard.write('o');
Keyboard.write('r');
Keyboard.write('d');
delay(5000); //makes sure the password isn't repeated
}
}
}
Как только код загружен, открываем монитор последовательного порта, установленный на 9600 бод. На секунду подносим NFC-карту к считывателю и убираем. Монитор должен выдать сообщение «Card detected #card number». Заменяем полученным номером текущий номер карты в строке «cardidentifier == ».
Теперь меняем участок кода, отвечающий за ввод пароля. Как видим, по умолчанию пароль представляет собой комбинацию «mypassword». Заменяем её на наш текущий пароль входа в операционную систему (количество символов пароля меняется простым добавлением/уменьшением строк с командой «Keyboard.write).
Перезагружаем итоговый код в Arduino, и теперь, стоит лишь нам поднести эту NFC-карту к ридеру, как пароль мгновенно будет введён в поле ввода. Жмём Enter и радуемся.
В комментариях к проекту нашёлся человек, предложивший дополнить череду команд ввода пароля финальной Keyboard.write(KEY_RETURN); для исключения необходимости нажимать Enter, но данное решение не проверялось.
Лучшие предложения
Находки AliExpress: самые интересные и полезные товары
10 полезных товаров дешевле 500 рублей
Надо брать: USB‑концентратор Orico за 1 717 рублей
16 уютных худи и свитшотов, которые согреют зимой
Выгодно: робот‑пылесос Dreame D10 Plus за 23 431 рубль
Цена дня: смартфон realme Note 60 за 8 920 рублей
15 магазинов, в которые стоит заглянуть во время «чёрной пятницы»
Отборные скидки: выгодные предложения от AliExpress, Tefal, Lamoda и других магазинов
Рак: почему возникает и как лечится. Гид, который будет полезен всем
Лол, это что, 2к17? Квиз, от которого можно поймать острый приступ ностальгии
Foodtech Tour: 3 факта о митапах от Еком-сервисов Яндекса
Внутренние убеждения и карьера: как справиться с мыслями, которые мешают достигать успехов