-1

如何将以下令牌转换为 6 位数字,反之亦然。

哈希/加密

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

反向散列/解密 [取回原始令牌]

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

1 回答 1

1

你所要求的实际上是不可能的。虽然哈希函数可以产生一定范围内的输出,但它们不能反转,并且加密(广义上)要求密文与纯文本的长度相同。

根据评论,您需要做的是生成一个 6 位数字并将其存储很短的时间以方便登录。

可以使用MemoryCache类(完整框架)或IMemoryCache(网络核心)接口来存储由用户 ID 或电子邮件键入的随机生成的数字,并检查该值是否存在并与用户提供的值匹配。

但是,我会非常认真地考虑评论中提出的观点,因为正确生成“随机”数字存在很多陷阱,攻击者可能以比真正随机数字更好的准确度猜测数字。

您应该考虑使用已建立的库来管理 SMS 2FA,假设这确实是最终目标。一个快速的谷歌出现了这个:

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

于 2020-01-23T15:22:21.600 回答