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($hash, 1) 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