【问题标题】:Converting .NET Web API Token to 6 digits number OTP将 .NET Web API 令牌转换为 6 位数字 OTP
【发布时间】:2020-01-23 14:42:56
【问题描述】:

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

散列/加密

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

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

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

【问题讨论】:

  • 不,这不安全,它将您可能的密码空间从接近无穷大的某个地方减少到一百万,黑客可以在几分钟内尝试(假设您有一个不错的网络服务器并且没有其他安全措施)。当然,你会说“但它在要求中”,但你的要求是不完整的。另外,不,这是不可能的。您无法反转散列,也无法加密 6 位数字中的 300 多个字母数字字符。所以你有一个XY问题。你究竟想做什么?是的,你在我输入这个问题时编辑了这个问题。
  • @CodeCaster 对不起,但是是的,要求是生成 6 位数字并发送到手机号码,是的,不应该使用数据库。所以我想利用 ASP.NET web api 令牌。在声明中添加用户信息并生成令牌。起初我尝试将整个令牌传递给客户端并进行验证。但要求是创建 6 位数字。所以我想只是将令牌转换为 6 位数字并发送给客户端。现在,当我必须验证它时,我只需反转算法并获取原始令牌并验证索赔细节。如果一切正常,我返回 true。
  • 是的,当然要求是建立一个不安全的系统。因为“方便”。没有人反对这一点,因为他们不了解其中的含义。如果你真的想要,你可以。但是您可以将身份验证令牌压缩成六位数。因此,您必须拥有一个数据库,在其中使用这个一次性密码作为实际密码,为给定用户执行登录,然后 然后 返回一个完整的令牌。
  • @CodeCaster 由于令牌是唯一的,所以说如果 [apitoken] 转换为 123456。现在在验证 6 位数字即 123456 时,首先我将其转换为原始令牌。 2 分钟后,它会因为令牌到期而失败。所以用户将不得不再次生成一个新的 6 位数字。
  • 是的,“要求”,在这样的问题中总是归结为什么,是由不知道自己在做什么的人授权和批准的。您想要一个一次性密码,然后就这样实现它。你需要一个数据库。

标签: c# asp.net asp.net-mvc token webapi


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多