He modificado la funcion para poder testeaar varios valores al mismo tiempo:
Código
function hotp($key,$c) { $mask = ['f' => '7','e' => '6','d' => '5','c' => '4','b' => '3','a' => '2','9' => '1','8' => '0']; echo "key: $key\n"; echo "c: $c\n"; echo "hash: $hash_value_str\n"; echo "4bits (hex): ".$hash_value_str[39]."\n"; echo "extract: $extract\n"; echo $extract[0]."& 7 ="; $extract[0] = $mask[$extract[0]]; echo $extract[0]."\n"; echo "new extract: $extract\n"; } echo "Value: $value\n"; return ($value % 1000000); }
Y ahora solo tengo que hacer:
Código
$base32 = new Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', FALSE, TRUE, TRUE); $key = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; echo "Key in base32: ".$base32->encode($key)."\n";
Tiene muchos Echo la funcion que se pueden comentar, estan ahi para de momento validar que la funcion esta haciendo bien los pasos del algoritmo.
Alguna salida es:
Código:
Key in base32: IFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAQ====
key: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
c: 52566234
hash: 428fc537d16c867ee7e1b4b3cc432c7e288d5769
4bits (hex): 9
extract: e1b4b3cc
e& 7 =6
new extract: 61b4b3cc
Value: 1639232460
232460
key: IFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAQ====
c: 52566234
hash: a49ac9470db4a542a36b42d28b7e089e11123f8a
4bits (hex): a
extract: 42d28b7e
Value: 1121094526
094526
Ahora como comentas he probado la llave en su formas de AAAAA y en sus forma en base32.
El google Authenticator lo configuro de la siguiente manera:
Primero agrego la llave en su formato base32
Y obtienes los valores
Pero no coincide con lo que arroja el programa, tengo la duda de saber si el valor $C es correcto, lo obtengo del time/30:
Código
Saludos!
MOD: Imagenes adaptadas a lo permitido.