我需要使用当前时间,因为稍后,另一个程序需要知道我何时生成了引脚并且输入了用户名和密码。
要点:
用户名+密码+当前时间=图钉[6位]
反向生成别针,我需要知道哪个特定,并检查它是否已经过了1分钟。
我不是要求直接代码,但我需要知道最好的,而不是最好的方法/算法。谢谢(顺便说一下,我是cpp初学者)
编辑:
我很抱歉没有说清楚。实际上,我需要OTP,在生成引脚后,其他程序需要像这样运行:validate {username} {password} {pin}
答案 0 :(得分:5)
如果您想要包含用户名和密码,并且避免轻易猜测,情况会更糟。
使用6位十进制数字,可以存储大约19位数据。因此,您必须确保在服务器端具有强大的反暴力保护,否则尝试所有可能的组合将是微不足道的。
One-time passwords没有内部可解码结构,除了普通密码外,它们通常用作身份验证的第二个因素。然后可以基于您建议的时间,但不可逆 - 另一端也有密钥,并且可以自己生成可能的列表。
因此,例如,除了输入用户名和(普通)密码之外,用户还会输入来自令牌的值,该令牌生成为AES(secretkey, currentminute)
,服务器会计算AES(secretkey, currentminute)
和{ {1}}等,以比较值。它还可以记录哪个令牌匹配,以便记录令牌时钟精度的估计值,这样可以使令牌的时钟有一些漂移,只要它经常使用得足够频繁。要想知道如何最好地使用6位数字中的19位,你需要一个真正的密码学家 - 正如我猜想的那样,简单的截断可能是安全的。
答案 1 :(得分:1)
作为事后的想法,提升了我之前对答案的评论:
我很确定这称'otp'是骗人的。 OTP纯属随机和秘密。
您描述的是一个简单的哈希。
你可以
MD5(username+password_hash+(seconds_past_1970%60))
我确信除了使用公钥加密而不是密码之外,这或多或少都是RSA密钥的用途。
编辑哦是的:从生成的哈希生成6位数字将非常简单:)