Google Authenticator uygulaması kullanılarak oluşturulabilen tek seferlik şifreleri kullanmaya çalışıyorum .
Google Authenticator ne yapar?
Temel olarak, Google Authenticator iki tür şifre uygular:
- HOTP - HMAC tabanlı Tek Kullanımlık Parola, yani parolanın RFC4226'ya uygun olarak her aramada değiştirildiği anlamına gelir ve
- TOTP - Her 30 saniyede bir değişen (bildiğim kadarıyla) Zamana dayalı Tek Kullanımlık Parola.
Google Authenticator, burada Açık Kaynak olarak da mevcuttur: code.google.com/p/google-authenticator
Mevcut kod
HOTP ve TOTP şifreleri oluşturmak için mevcut çözümler arıyordum, ancak pek bir şey bulamadım. Sahip olduğum kod, HOTP oluşturmaktan sorumlu aşağıdaki kod parçacığıdır:
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
Karşılaştığım sorun, yukarıdaki kodu kullanarak oluşturduğum şifrenin Android için Google Authenticator uygulamasıyla oluşturulanla aynı olmaması. GA uygulamasında sağlanan anahtara eşit olmak üzere birden fazla intervals_no
değer denemiş olsam da (tam olarak ilk 10000'de intervals_no = 0
) secret
.
Sahip olduğum sorular
Sorularım:
- Neyi yanlış yapıyorum?
- Python'da HOTP ve / veya TOTP'yi nasıl oluşturabilirim?
- Bunun için mevcut herhangi bir Python kitaplığı var mı?
Özetlemek gerekirse: lütfen bana Google Authenticator kimlik doğrulamasını Python kodum içinde uygulamama yardımcı olacak herhangi bir ipucu verin.