我正在编写的程序要求用户在执行代码之前接受来自管理员的响应密码的挑战,并且是动态的(不是同一个挑战)。受到挑战的信息需要很短,而临时用户可以通过电话向其他人阅读。
我一直在做研究,但大部分信息都是针对更复杂的高安全性方法,在这种情况下不需要,因为我们不保护核信息或任何东西。我发现的其他东西非常简单,提供x,然后给出z的答案,由x + y = z计算,但这太简单了。
我正试图避免的解决方案:提供一个加密密钥,人们很难与另一个人口头沟通以获取响应代码。
是否有任何解决方案可以提供此类挑战,还是会遇到长串的随机字符?
更新:
管理员将没有关于用户信息的信息。我只是在寻找一种简单的算法,如果存在一个简单的数学方程式。用户的挑战是通过管理员可用于提供响应值的算法自动生成的。它可以是字母或数字,但必须小而简单。
答案 0 :(得分:1)
假设您要生成一些信息"密码"你可以组合所有信息,用盐哈希(即SHA256)并获得你认为有用的字节数 - 比如2-3个字节来产生短号。这样,您可以根据提供的数据轻松地重新计算相同的值,以验证数据。
var codeByte = ComputeByteArraySha256(
DateTime.Today + AdminName + UserName + SecretSalt)[13];
var codeText = codeByte.ToString();
根据实际的安全要求,几个字节的哈希可能就足够了。
混合使用其他一些信息(如数据库中的最新数据版本)可能会使您有权使这些令牌过期/拥有一次性令牌。
通过众所周知的方式向用户提供此类代码(如每个注册的电子邮件/电话)是广泛使用的方法来验证用户的身份。