J'essaie d'utiliser des mots de passe à usage unique qui peuvent être générés à l'aide de l' application Google Authenticator .
Ce que fait Google Authenticator
Fondamentalement, Google Authenticator implémente deux types de mots de passe:
- HOTP - Mot de passe à usage unique basé sur HMAC, ce qui signifie que le mot de passe est modifié à chaque appel, conformément à la RFC4226 , et
- TOTP - Mot de passe à usage unique basé sur le temps, qui change toutes les 30 secondes (pour autant que je sache).
Google Authenticator est également disponible en Open Source ici: code.google.com/p/google-authenticator
Code actuel
Je cherchais des solutions existantes pour générer des mots de passe HOTP et TOTP, mais je n'ai pas trouvé grand-chose. Le code que j'ai est l'extrait de code suivant responsable de la génération de HOTP:
import hmac, base64, struct, hashlib, time
def get_token(secret, digest_mode=hashlib.sha1, intervals_no=None):
if intervals_no == None:
intervals_no = int(time.time()) // 30
key = base64.b32decode(secret)
msg = struct.pack(">Q", intervals_no)
h = hmac.new(key, msg, digest_mode).digest()
o = ord(h[19]) & 15
h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
return h
Le problème auquel je suis confronté est que le mot de passe que je génère à l'aide du code ci-dessus n'est pas le même que celui généré à l'aide de l'application Google Authenticator pour Android. Même si j'ai essayé plusieurs intervals_no
valeurs (exactement les 10000 premiers, en commençant par intervals_no = 0
), secret
étant égal à la clé fournie dans l'application GA.
Questions que j'ai
Mes questions sont:
- Qu'est-ce que je fais mal?
- Comment puis-je générer HOTP et / ou TOTP en Python?
- Existe-t-il des bibliothèques Python pour cela?
Pour résumer: veuillez me donner tous les indices qui m'aideront à mettre en œuvre l'authentification Google Authenticator dans mon code Python.
casefold=True
pour que les gens ne devraient plus avoir de problèmes similaires maintenant. Merci pour votre contribution.ord(h[19]) & 15
en:o = h[19] & 15
Merci BTWJe voulais un script python pour générer le mot de passe TOTP. Alors, j'ai écrit le script python. Ceci est ma mise en œuvre. J'ai ces informations sur wikipedia et quelques connaissances sur HOTP et TOTP pour écrire ce script.
la source