【发布时间】:2014-02-18 17:01:16
【问题描述】:
这个问题更多的是一个设计知识,而不是一个纯粹的技术问题。
我想知道实现身份验证机制的最佳方式是什么,要求用户在整个密码中的特定位置输入/选择字符。前任。要求用户输入/选择第 3、5、9 个字符,然后检查他们是否从原始密码中输入/选择了正确的字符。
据我所知,密码在存储之前会使用不可逆算法进行加盐和加密。当用户输入他的整个密码时,它会再次被加盐、加密并与存储的值进行比较。但在上述仅输入/选择某些字符的情况下,如何检查整个密码?
以下是我知道的两种(不安全)实现上述方法的方法
- 将原始密码分解为单个字符,然后 加盐和加密它们。然后比较用户输入的值 针对特定角色。
- 将原始密码分解为预定义的组合,如第 2、3 和 7 个字符,然后加盐和 加密它们。稍后与用户输入的值进行比较。
但我认为通过上述实现,破解密码比破解整体加密的密码更容易。
最安全的实施方式是什么?
【问题讨论】:
-
感觉是让人们发疯/远离您的应用/网站的绝佳方式。你试过自己做吗? (我的意思是你需要多长时间才能输入密码的第 8 个字符 - 不要写下来,不要打字)......
-
最安全/最好的实现方式?不。需要考虑的事情:通过要求输入 3/5/9 个字符作为密码,您实际上是将他们的密码减少到三个字符。
-
@AlexeiLevenkov 我同意,它对用户不友好。但显然英国的大多数银行网站都采用了这种机制,我只是想知道它是如何工作/实现的。
标签: c# java authentication encryption passwords