Преобразование токена .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, если это действительно конечная цель. Быстрый гугл обнаружил это: