import base64 import hmac import hashlib import time import struct def generate_totp(secret_key, interval=30, digits=6): # Текущее время в секундах current_time = int(time.time()) # Временной шаг time_step = current_time // interval # Преобразуем временной шаг в 8-байтовое число (big-endian) time_step_bytes = struct.pack(">Q", time_step) # Преобразуем секретный ключ из Base32 в байты secret_key_bytes = base64.b32decode(secret_key) # Вычисляем HMAC-SHA1 hmac_result = hmac.new(secret_key_bytes, time_step_bytes, hashlib.sha1).digest() # Выбираем смещение offset = hmac_result[-1] & 0x0F # Извлекаем 4 байта truncated = hmac_result[offset:offset+4] # Преобразуем в число code = struct.unpack(">I", truncated)[0] # Обрезаем до 6 цифр code = code % 10**digits return f"{code:06d}" # Пример использования secret_key = "JBSWY3DPEHPK3PXP" print(generate_totp(secret_key))