Generating OATH-compliant OTP (one time passwords) results in PHP:
<?php
$otp = oath_truncate (oath_hotp ($key, $counter), $length);
function oath_hotp ($key, $counter) {
// Counter
$bin_counter = pack ('C*', $counter);
// Pad to 8 chars
if (strlen ($bin_counter) < 8) {
$bin_counter = str_repeat (chr(0), 8 - strlen ($bin_counter)) . $bin_counter;
}
// HMAC
$hash = hash_hmac ('sha1', $bin_counter, $key);
return $hash;
}
function oath_truncate ($hash, $length = 6) {
// The last byte is used as an offset
$offset = hexdec (substr ($hash, 38)) & 0xf;
// Extract the relevant part, and clear the first bit
$hex_truncated = substr ($hash, $offset * 2, 8);
$bin_truncated = decbin (hexdec ($hex_truncated));
$bin_truncated[0] = '0';
$dec_truncated = bindec ($bin_truncated);
return substr ($dec_truncated, 0 - $length);
}
?>
hash_hmac
(PHP 5 >= 5.1.2, PECL hash:1.1-1.5)
hash_hmac — Génère une valeur de clé de hachage en utilisant la méthode HMAC
Description
Liste de paramètres
- algo
-
Nom de l'algorithme de hachage sélectionné (c'est-à-dire "md5", "sha256", "haval160,4", etc.)
- data
-
Le message qui sera haché.
- key
-
Clé secrète partagée utilisée pour générer la variance HMAC de l'empreinte numérique.
- raw_output
-
Lorsqu'il vaut TRUE, la sortie sera des données brutes binaires. Lorsqu'il vaut FALSE, la sortie sera des chiffres hexadécimaux en minuscule. La valeur par défaut est FALSE.
Valeurs de retour
Retourne une chaîne de caractères contenant l'empreinte numérique calculée en chiffre hexadécimal minuscule à moins que raw_output soit fixé à TRUE. Dans ce cas, la représentation brute binaire de l'empreinte numérique est retournée.
Exemples
Exemple #1 Exemple avec hash_hmac()
<?php
echo hash_hmac('ripemd160', 'Le rapide goupil brun sauta par dessus le chien paresseux.', 'secret');
?>
L'exemple ci-dessus va afficher :
a6f41314c7a3482836268cf504b066e08216e40f
hash_hmac
04-Jul-2008 12:54
