Implementazione password in webserver

Salve a tutti,
cercando sul WEB e nel forum ho scoperto che il metodo più semplice per proteggere un webserver è quello di implementare una password con codifica Base64. Tuttavia, non riesco ad inserire questa funzione all’interno del mio programma, che permette di accedere una luce e aprire il garage.

#include <SPI.h>
#include <Ethernet.h>

// Inserisco il MAC Address e l'indirizzo IP 
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10,0,0, 100);

// Inizializzo la libreria Ethernet per la creazione del server. La porta di default del HTTP è la 80
EthernetServer server(80);

int LEDpin = 3; // PIN a cui è connesso il telecomando
int LUCE = 5; / /PIN a cui è connesso il Relè
String readString = String(30);
String state = String(3);
String state1 = String(3);

void setup()
{
  // Iniziliazzo la connessione di rete
  Ethernet.begin(mac, ip);
  server.begin();
  
  //Impostoi PIN di uscita
  pinMode(LEDpin,OUTPUT);
  pinMode(LUCE,OUTPUT);
  
  digitalWrite(LEDpin,LOW);
  state = "spenta";
  digitalWrite(LUCE,LOW);
  state1 = "spenta";
}

void loop()
{
  // In ascolto di nuovi utenti
  EthernetClient client = server.available();
  if (client) {
    // Se c'è u client connesso
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply

        if (readString.length() < 30) {
          readString.concat(c);
        }

        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          int LED = readString.indexOf("LED=");
          
          // Questi funzioni permettono di capire quale pulsante è stato premuto

          if (readString.substring(LED,LED+5) == "LED=T") {
            digitalWrite(LEDpin,HIGH);
            state = "<FONT FACE=Arial COLOR=#FFA500 > accesa </FONT>";
          }
          else if (readString.substring(LED,LED+5) == "LED=F") {
            digitalWrite(LEDpin,LOW);
            state = "<FONT FACE=Arial COLOR=#FFA500 > spenta </FONT>";
          } 
          
           if (readString.substring(LED,LED+5) == "LED=S") {
            digitalWrite(LUCE,HIGH);
            state1 = "<FONT FACE=Arial COLOR=#FFA500 > accesa </FONT>";
          }
          else if (readString.substring(LED,LED+5) == "LED=G") {
            digitalWrite(LUCE,LOW);
            state1 = "<FONT FACE=Arial COLOR=#FFA500 > spenta </FONT>";
          } 
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          
          client.println("<b><font face=”Verdana, Arial, Helvetica, sans-serif” color=#0000FF  <FONT SIZE=16>Attraverso questa pagina web e' possibile accedere e spegnere una lampanda connessa al rele' e aprire/chiudere il Garage</font></b>");
          client.println();
          
          
          
          // Pulsanti della pagina WEB
          client.println("<form  method=get name=form>");
          client.println("<button name=LED value=T type=submit style=height:600px;width:940px> <FONT SIZE=36>Aziona Telecomando</button>");
          //client.println("<button name=LED value=F type=submit style=height:600px;width:460px><FONT SIZE=14>Spegni </button>");
          client.println("</form>
");
          
          
          /*client.println();
          client.println("<FONT FACE=Arial COLOR=#FFA500 > La luce e' </FONT>");
          client.print(state);
          client.print("

");*/
          
          if (state == "<FONT FACE=Arial COLOR=#FFA500 > accesa </FONT>") {
            client.println("<a href=\"./?LED=F\">Spegni<a>");
          }
          else {
            client.println("<a href=\"./?LED=T\">Accendi<a>");
          }
          client.println();
          
          client.println("<form  method=get name=form>");
          client.println("<button name=LED value=S type=submit style=height:600px;width:470px> <FONT SIZE=15>Accendi</button>");
          client.println("<button name=LED value=G type=submit style=height:600px;width:470px><FONT SIZE=15>Spegni </button>");
          client.println("</form>
");
          client.println();
          client.println("<FONT FACE=Arial COLOR=#FFA500 > La luce e' </FONT>");
          client.print(state1);
          client.print("

");
          
           if (state1 == "<FONT FACE=Arial COLOR=#FFA500 > accesa </FONT>") {
            client.println("<a href=\"./?LED=G\">Spegni<a>");
          }
          else {
            client.println("<a href=\"./?LED=S\">Accendi<a>");
          }
          
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
        
      }
    }
    // give the web browser time to receive the data
    delay(1);
    readString = "";
    // close the connection:
    client.stop();
  }
}

Il codice che implementa questa funzione è, per esempio, questo:

#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"
 
//definisco mac address e indirizzo ip
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
static uint8_t ip[] = { 192, 168, 1, 10};
 
//creo un oggetto webduino
WebServer webserver("", 80);
 
//funzione che crea la pagina principale del sito
void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  server.httpSuccess();
  if (type != WebServer::HEAD)
  {
    //invio al browser la pagina principale
    P(helloMsg) = "<h4>Accedi:</h4><a href=\"private.html\">Pagina Privata</a>";
    server.printP(helloMsg);
  }
}
 
//questa funzione permette di verificare il nome utente e la password
//e in caso di successo di visualizzare la pagina privata
void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  //user= admin
  //password= admin
 
  //verifico nome utente e password
  if (server.checkCredentials("YWRtaW46YWRtaW4="))
  {
    //in caso affermativo...
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      //invio al browser la pagina privata
      P(helloMsg) = "<h3>Buongiorno Admin!</h3>";
      server.printP(helloMsg);
    }
  }
  else
  {
    //creo una risposta http
    //nel caso in cui si tenta un accesso
    //no autorizzato
    server.httpUnauthorized();
  }
}
 
void setup()
{
  //inizializzo la ethernet shield
  Ethernet.begin(mac, ip);
  //definisco funzione che gestisce
  //la pagina principale del sito
  webserver.setDefaultCommand(&defaultCmd);
  webserver.addCommand("index.html", &defaultCmd);
  //definisco la funzione che gestisce la pagina privata
  webserver.addCommand("private.html", &privateCmd);
 
  //inizializzo la libreria webduino
  webserver.begin();
}
 
void loop()
{
  char buff[64];
  int len = 64;
 
  webserver.processConnection(buff, &len);
}

Grazie come sempre per il supporto !