【发布时间】: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