Неправильный одноразовый пароль, сгенерированный cryptography.hazmat.primitives.twofactor.totp - PullRequest
1 голос
/ 03 марта 2020

решено:

Использование фрагмента кода из библиотеки PyOTP для заполнения и кодирования ключа перед передачей его алгоритму.

        missing_padding = len(key) % 8
        if missing_padding != 0:
            key += '=' * (8 - missing_padding)
        byte_key = b32decode(key, casefold=True)
        totp = cryptography.hazmat.primitives.twofactor.totp.TOTP(
            byte_key,
            6,
            SHA1(),
            30,
            backend=default_backend(),
            enforce_key_length=False
        )
        print("{:<10} {}".format(account, totp.generate(time()).decode()))

Я генерирую одноразовые пароли для 2 -факторная аутентификация с использованием криптографии и библиотек PyOTP. Однако объекты TOTP из двух библиотек дают разные выходные данные, несмотря на использование одного и того же ключа. Я подозреваю, что это что-то делает, должен ли ключ предоставляться как строковый или байтовоподобный объект, но я не уверен в том, как обрабатывать кодирование / декодирование.

Фрагмент (ключ предоставляется в виде чтения строки из (зашифрованного) файла ->

        totp = cryptography.hazmat.primitives.twofactor.totp.TOTP(
            key.encode(),
            6,
            SHA1(),
            30,
            backend=default_backend()
        )
        totp2 = pyotp.TOTP(key)
        print("{:<10} {}".format(
            account,
            totp.generate(time()).decode()),
            totp2.now()
        )

Результат ->

Dropbox    508629 405771

OTP, сгенерированный PyOTP, соответствует Google Authenticator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...