Пароль

logo424
Offline
Зарегистрирован: 24.05.2014

Доброго времени суток! 

Подскажите как сделать проверку на "хозяина" т.е. пароль
Например
 Введите пароль:
123
ок
 


char incomingByte; // входящие данные
int led = 13; // диод на схеме


void setup() {
  Serial.begin(9600); // инициализация порта

  pinMode(led, OUTPUT); 
  Serial.println("Enter pass: ");

}

// Функция для проверки пароля

void loop() {


  if (Serial.available() > 0) { //если пришли данные
    incomingByte = Serial.read(); // считываем байт
    if(incomingByte == '1') {
      digitalWrite(led, LOW); 
      Serial.println("OFF");
    }
    if(incomingByte == '2') {
      digitalWrite(led, HIGH); 
      Serial.println("on");
    }
  }

}
Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

42

axill
Offline
Зарегистрирован: 05.09.2011

Считайте serial.read в строку пока new line не встретите

потлм строку сравните с нужным паролем

logo424
Offline
Зарегистрирован: 24.05.2014

axill пишет:

Считайте serial.read в строку пока new line не встретите

потлм строку сравните с нужным паролем

Я делал как 1 из способов таким образом 

 if(incomingByte == '123') {

}
но сразу же срабатывали  2 и 3 


axill
Offline
Зарегистрирован: 05.09.2011

С точки зрения языка Си++ вы написали глупость

оператор == сравнивает числа, а не строки. Поэтому он сначала преобразовал "123" в число, а потом выполнил сравнение

так как слева байт, то и справа был использован всего один байт

к тому же read возвращает один символ, вам надо в цикле делать read пока нет новой строки и все символы пихать в String или char буфер

4ERTIK
Offline
Зарегистрирован: 24.03.2013

Puhlyaviy пишет:

42

Дельный совет опытного чела.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

4ERTIK пишет:

Puhlyaviy пишет:

42

Дельный совет опытного чела.

ну а вы думали так все просто что ли? просто если человек не понимает с чем он работает (ака типы переменных), то читать ему курс "основы", нет никакого желания... гугл в помощь, там уже столько написано на эту тему... к ардуино его вопрос слабо относится.

std
Offline
Зарегистрирован: 05.01.2012

В старину (году в 1994, когда я был во втором классе) у меня была двойка, она же 80286. А в её корпусе (да и всех тогдашних, наверно), была очень удобная фича, называемая keylock. Это такой замок, совмещенный с выключателем. Вместо пароля можно поставить его, т. к. сейчас такой можно купить, чтобы не устраивать раскопки в старых складах и помойках.

Выглядит примерно так:

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Правильнее написать скетч, распознающий "хозяина" по сетчатке глаза, т.к. последовательность нажатия клавиш злодеи могут подсмотреть.

Geronimo
Offline
Зарегистрирован: 06.05.2013

Замочек вскрывается мелкой отверткой без повреждений замка

Geronimo
Offline
Зарегистрирован: 06.05.2013

Замочек вскрывается мелкой отверткой без повреждений замка

Клапауций
Offline
Зарегистрирован: 10.02.2013

Andrey_Y_Ostanovsky пишет:

Правильнее написать скетч, распознающий "хозяина" по сетчатке глаза, т.к. последовательность нажатия клавиш злодеи могут подсмотреть.

по ДНК

art100
Offline
Зарегистрирован: 09.03.2014

голосую за установку навесного замка в аудиторию

дабы студенты с паралельного курса не могли ардуину попользовать у лаборанта

заодно пачяльник стырить

канифоль всю пожечь

в тапках лаборанта походить

подышать через форточку лаборанта

нарисовать на столе лаборанта нехорошее слово

 

1.пароль это строка

2.влетаемые символы надо загонять в строку до появления символа окончания строки "\n"

3.сравнить строки

все теория защиты систем окончена

Устанваливаю сложность 6 символов Кербериос (Только латиница большие и маленкие и цифры)

принесите работающие коды для нашей лаборатной системы на Васике или С

компиляторы можете взять у лаборанта

Повторяю на своих флешках которые будут отформатированы перед раздачей

или скачать с нашего универского сайта

приветсвуются решения в желез например на arduino которые вы все таскаете на переменках например

зачет в среду

кто не явится получит автоматом незачет

 

 

 

toc
Offline
Зарегистрирован: 09.02.2013

для сравнения заранее заданного набора символов (пароля) с посимвольно поступающими от пользователя данными (например, из Serial.read() ) рекомендую использовать библиотеку password.h, которую найдёте на arduino.cc.

std
Offline
Зарегистрирован: 05.01.2012
art100
Offline
Зарегистрирован: 09.03.2014

зачет вчера был

зачет сдал вчера только toc с библиотечной функцией от http://arduino.cc password.h

/*
||
|| @file SerialMonitor.pde
|| @version 1.1
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | A simple password application that uses the serial monitor as input source.
|| #
||
*/

//http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Password.h>

Password password = Password( "1234" );

byte currentLength = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("Try to guess the password!");
  Serial.println("Reset with ! evaluate with ?");
  Serial.print("Enter password: ");
}

void loop(){
  if (Serial.available()){
    char input = Serial.read();
    switch (input){
      case '!': //reset password
        password.reset();
        currentLength = 0;
        Serial.println("\tPassword is reset!");
      break;
      case '?': //evaluate password
        if (password.evaluate()){
          Serial.println("\tYou guessed the correct password!");
        }else{
          Serial.println("\tYou did not guess the correct password!");
        }
      break;
      default: //append any keypress that is not a '!' nor a '?' to the currently guessed password.
        password << input;
        currentLength++;
        
        //Print some feedback.
        Serial.print("Enter password: ");
        for (byte i=0; i<currentLength; i++){
          Serial.print('*');
        }
        Serial.println();
     }
  }
}

/*
||
|| @file Password.h
|| @version 1.2
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
||  4/5/2012 Updates Nathan Sobieck: Nathan@Sobisource.com
||   Now v1.2 Arduino IDE v1.0 With BAckwards compatibility
||
|| 
||
|| @description
|| | Handle passwords easily
|| #
||
|| @license
|| | This library is free software; you can redistribute it and/or
|| | modify it under the terms of the GNU Lesser General Public
|| | License as published by the Free Software Foundation; version
|| | 2.1 of the License.
|| |
|| | This library is distributed in the hope that it will be useful,
|| | but WITHOUT ANY WARRANTY; without even the implied warranty of
|| | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
|| | Lesser General Public License for more details.
|| |
|| | You should have received a copy of the GNU Lesser General Public
|| | License along with this library; if not, write to the Free Software
|| | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
|| #
||
*/

#ifndef PASSWORD_H
#define PASSWORD_H

// Arduino versioning.
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"	// for digitalRead, digitalWrite, etc
#else
#include "WProgram.h"
#endif

#define MAX_PASSWORD_LENGTH 20

#define STRING_TERMINATOR '\0'

class Password {
public:
	Password(char* pass);
	
	void set(char* pass);
	bool is(char* pass);
	bool append(char character);
	void reset();
	bool evaluate();
	
	//char* getPassword();
	//char* getGuess();
	
	//operators
	Password &operator=(char* pass);
	bool operator==(char* pass);
	bool operator!=(char* pass);
	Password &operator<<(char character);
	
private:
	char* target;
	char guess[ MAX_PASSWORD_LENGTH ];
	byte currentIndex;
};

#endif

/*
|| @changelog
|| | 1.1 2009-06-17 - Alexander Brevig : Added assignment operator =, equality operators == != and insertion operator <<
|| | 1.0 2009-06-17 - Alexander Brevig : Initial Release
|| #
*/

 

/*
||
|| @file Password.cpp
|| @version 1.2
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
||  4/5/2012 Updates Nathan Sobieck: Nathan@Sobisource.com
||   Now v1.2 Arduino IDE v1.0 With BAckwards compatibility
||
|| @description
|| | Handle passwords easily
|| #
||
|| @license
|| | This library is free software; you can redistribute it and/or
|| | modify it under the terms of the GNU Lesser General Public
|| | License as published by the Free Software Foundation; version
|| | 2.1 of the License.
|| |
|| | This library is distributed in the hope that it will be useful,
|| | but WITHOUT ANY WARRANTY; without even the implied warranty of
|| | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
|| | Lesser General Public License for more details.
|| |
|| | You should have received a copy of the GNU Lesser General Public
|| | License along with this library; if not, write to the Free Software
|| | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
|| #
||
*/

#include "Password.h"

//construct object in memory, set all variables
Password::Password(char* pass){
	set( pass );
	reset();
}

//set the password
void Password::set(char* pass){
	target = pass;
}

//evaluate a string, is it equal to the password?
bool Password::is(char* pass){ 
	byte i=0;
	while (*pass && i<MAX_PASSWORD_LENGTH){
		guess[i] = pass[i];
		i++;
	}
	return evaluate();
}

//append a char to the guessed password
bool Password::append(char character){ 
	if (currentIndex+1==MAX_PASSWORD_LENGTH){
		return false;
	}else{
		guess[currentIndex++] = character;
		guess[currentIndex] = STRING_TERMINATOR; //ensure a valid c string
	}
	return true;
}

//reset the guessed password, one can guess again
void Password::reset(){ 
	currentIndex = 0;
	guess[currentIndex] = STRING_TERMINATOR;
}

//is the current guessed password equal to the target password?
bool Password::evaluate(){ 
	char pass = target[0];
	char guessed = guess[0];
	for (byte i=1; i<MAX_PASSWORD_LENGTH; i++){
		
		//check if guessed char is equal to the password char
		if (pass==STRING_TERMINATOR && guessed==STRING_TERMINATOR){
			return true; //both strings ended and all previous characters are equal 
		}else if (pass!=guessed || pass==STRING_TERMINATOR || guessed==STRING_TERMINATOR){
			return false; //difference OR end of string has been reached
		}
		
		//read next char
		pass = target[i];
		guessed = guess[i];
	}
	return false; //a 'true' condition has not been met
}

//set password using operator =
Password &Password::operator=(char* pass){
	set( pass );
	return *this;
}

//test password using ==
bool Password::operator==(char* pass){
	return is( pass );
}

//test password using !=
bool Password::operator!=(char* pass){
	return !is( pass );
}

//append to currently guessed password using operator <<
Password &Password::operator<<(char character){
	append( character );
	return *this;
}

/*
|| @changelog
|| | 2009-06-17 - Alexander Brevig : Added assignment operator =, equality operators == != and insertion operator <<
|| | 2009-06-17 - Alexander Brevig : Initial Release
|| #
*/

так что вам батенька 2 за неявку

да к тому же кода вы не предоставили

 

одно слово

двоечник.

вот и сиди со своей 80286

а мы будем пользовать EC1849

 

 

с замком покрепче

кстати я сам ее себе собрал для дома в те бандисткие 90-ые впрочем как ранние 40.. так и поздние 51...

а теперь опять докатился до Sincler Spectrum ZX80 48kbyte 8бит тфу-ты arduino uno 32kbyte

и опять эти дебильные вопросы как пароль установить

следующий будет

как пароль взломать

 

плять

вь.ебать по я.йцам и ничего делать не надо 

 

чего-то надоело это скудоумие

 

 

 

 

 

 

std
Offline
Зарегистрирован: 05.01.2012

Хорошо, что мне пароль взламывать не надо. У меня паяльник есть :)