Преобразование токена .NET Web API в шестизначный номер OTP

Как преобразовать следующий токен в шестизначное число и наоборот.

Хеширование / шифрование

Q3XMaFgx3l0n9Nkb8XIUTZ9jqWDOJtefhPtv0yXPQhFBUq_hhGyW9p54apIDTpFs5Am_6Rs8VSKLClDJjFfOtM78I8EDLjwd4zjvWK0WBN9g7I2_F2D9uxEWfSUrgIIzAqw2jqGkOweW7avOmdtAdaTzlqtAY1eXJfgZg1JrkWmr9oqxsEeedViYMrJgGLssIGJM_pjTEnlwsmQiVdH5wJWwDgj5No8Wt7YdsV1sKs_44rrjfavhI4tez0vbMoeWAj5sXqTaVGH4AeVLrIUkyN7XsNJhBFTOEWyqC3L5uOXkqT_KRXOF6DV0fdMIfBmUx05hw4A =========> 123456

Обратное хеширование / расшифровка [чтобы вернуть исходный токен]

  • 123456 =========>Q3XMaFJu3Kgx3l0n9Nkb8Xu0IUTZ9jqWDOJtefhPtv0yXPQhFBUq_hhGyW9p54apIDTpFs5Am_6Rs8VSKLClDJjFfOtM78I8EDLjwd4zjvWK0WBN9g7I2_F2D9uxEWfSUrgIIzAqw2jqGkOweW7avOmdtAdaTzlqtAY1eXJfgZg1JrkWmr9oqxsEeedViYMrJgGLssIGJM_pjTEnlwsmQiVhdH5wJWwDgj5No8Wt7YdsV1sKs_44rrjfavhI4tez0hvbMoeWAj5sXqTaVGH4AeVLrIUkyN7XsNJhBFTOEWyqC3L5uOXkqT_KRXOF6DV0fdMIfBmUx05hw4A

1 ответ

Решение

То, о чем вы просите, на самом деле невозможно. Хотя хеш-функции могут производить вывод в определенном диапазоне, они не могут быть отменены, а шифрование (в широком смысле) требует, чтобы зашифрованный текст был такой же длины, как и обычный текст.

Основываясь на комментариях, вам нужно сгенерировать 6-значное число и сохранить его в течение очень короткого времени, чтобы облегчить вход в систему.

Вы можете использовать интерфейс класса MemoryCache (полная структура) или IMemoryCache (чистое ядро) для хранения случайно сгенерированного числа, введенного с помощью идентификатора пользователя или адреса электронной почты, и проверить, существует ли значение и соответствует тому, которое предоставлено пользователем.

Однако я бы очень серьезно отнесся к вопросам, поднятым в комментариях, поскольку существует очень много подводных камней, связанных с правильной генерацией "случайных" чисел, и злоумышленник может угадать число с гораздо большей точностью, чем истинное случайное число.

Вы должны рассмотреть возможность использования установленной библиотеки для управления 2FA SMS, если это действительно конечная цель. Быстрый гугл обнаружил это:

https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/two-factor-authentication-using-sms-and-email-with-aspnet-identity

Другие вопросы по тегам