Visualizzazione dei risultati da 1 a 1 su 1
  1. #1

    Funzione hash hmac e corrispondenza con codice ottenuto con arduino

    Salve a tutti,
    spero di trovare qualcuno esperto dell'argomento e spero di postare nella sezione giusta essendo il problema a metà strada tra PHP ed arduino.
    Mi sto cimentando nella realizzazione con Arduino e PHP di un sistema di autenticazione basato su One time password. In particolare (come definito nella RFC 4226) di una one time password basata su una chiave segreta ed un contatore. In base al valore del contatore e alla chiave segreta, tramite la funzione di HMAC-SHA1 si estrapola una one time password.

    Tramite arduino l'utente legge tale password, la inserisce in un form PHP: all'invio del form il server genera la password attuale in base al contatore e alla chiave segreta che sia arduino e sia il server conoscono e la compara con quella inserita. Se le password coincidono allora l'utente viene validato altrimento no.

    Con PHP ho utilizzato queste semplici righe:
    Codice PHP:
    $key "datasecuri";
    $counter 1;
    $password hash_hmac("sha1"$counter$key);
    foreach(
    str_split($hash1) as $hex) { print hexdec($hex); }[COLOR=#222426][FONT=Arial][/FONT][/COLOR] 


    Mi viene fuori un valore di 160 bit.

    Nella parte arduino ho trovato uno sketch altrettanto semplice che riporto di seguito commentato:
    codice:
    #include"sha1.h"
    //Questa è la funzione che stampa l'hash dato che la libreria fornisce il risultato sottoforma
    //di array di 20 elementi
    void printHash(uint8_t* hash){
      int i;
      for(i=0; i<20; i++)Serial.print(hash[i]);
      Serial.println();
    }
    
    //questa password è l'equivalente di datasecuri
    uint8_t hmacKey1[]={0x64,0x61,0x74,0x61,0x73,0x65,0x63,0x75,0x72,0x69};
    //Il counter utilizzato come testo per la funzione
    int counter =1;
    
    void setup(){
    //Inizializzazione del monitor seriale
      Serial.begin(9600);
    }
    
    void loop(){
       //Calcolo dell'Hmac-hash
       uint8_t* hash;
       Sha1.initHmac(hmacKey1,10);
       Sha1.print(counter);
       hash =Sha1.resultHmac();
    //Stampa dell'hmac
       printHash(hash);}
    


    In allegato i file di libreria Sha1.cpp e sha.c
    Da cosa puo' dipendere la diversità di risultato?
    Grazie
    File allegati File allegati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.