Отображение TOTP‑кодов с обновляющимися таймерами через корутины

Таймер TOTP привязан к абсолютному времени, а не к моменту открытия строки. Используйте один общий ticker, вычисляйте номер 30-секундного окна и обновляйте коды при его изменении.

Короткий ответ

Что ответить на собеседовании

Таймер TOTP привязан к абсолютному времени, а не к моменту открытия строки. Используйте один общий ticker, вычисляйте номер 30-секундного окна и обновляйте коды при его изменении.

Подробный разбор

Ответ с пояснениями

Условие

Задача: вывести список одноразовых паролей (TOTP). Каждый пароль должен сопровождаться таймером, отсчитывающим 30 секунд. По истечении этого периода пароль генерируется заново. Реализовать логику обновления с использованием корутин.

Ответ

Таймер TOTP привязан к абсолютному времени, а не к моменту открытия строки. Используйте один общий ticker, вычисляйте номер 30-секундного окна и обновляйте коды при его изменении.

Для стандартных T0 = 0 и шага 30 секунд counter = floor(unixSeconds / 30), оставшееся время = 30 − unixSeconds % 30. Каждую секунду корутина заново читает часы: простое уменьшение счётчика накопит дрейф и ошибётся после паузы. При смене counter пересчитайте все коды через проверенную реализацию TOTP. Обновления UI привяжите к lifecycle, секреты не логируйте и не храните в открытом виде. Отдельная бесконечная корутина на каждую видимую строку не нужна.

Источник: www.rfc-editor.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее