-1

我正在编写的程序要求用户在执行代码之前从管理员那里获得响应密码的挑战,并且是动态的(不是相同的挑战)。受质疑的信息必须简短,并且是普通用户可以通过电话向其他人阅读的内容。

我一直在做研究,但那里的大部分信息都是针对更复杂的高安全性方法,在这种情况下不需要,因为我们没有保护核信息或任何东西。我发现的其他事情非常简单,提供 x 然后给出由 x + y = z 计算的 z 的答案,但这太简单了。

我试图避免的解决方案:提供一个加密密钥,人们很难与另一个人进行口头交流以获得响应代码。

是否已经有任何解决方案可以提供这种类型的挑战,或者我是否会被一长串随机字符卡住?

更新:

管理员将没有关于用户信息的信息。我只是在寻找一种简单的算法,如果存在的话,它不是一个简单的数学方程。用户的挑战是通过管理员可以用来提供响应值的算法自动生成的。它可以是字母或数字,但必须小而简单。

4

1 回答 1

1

假设您有一些想要生成“密码”的信息,您可以组合所有信息,用盐(即 SHA256)对其进行哈希处理,并获取您认为有用的字节数——比如 2-3 个字节来生成短数。这样,您可以轻松地根据为验证数据而提供的数据重新计算相同的值。

var codeByte = ComputeByteArraySha256(
      DateTime.Today + AdminName + UserName + SecretSalt)[13];
var codeText = codeByte.ToString();

根据实际的安全要求,几个字节的散列可能就足够了。

混合一些附加信息(如数据库中最新版本的数据)可能使您能够使此类令牌过期/拥有一次性令牌。

通过众所周知的方式提供此类代码以与用户通信(如按注册的电子邮件/电话)是广泛使用的验证用户身份的方法。

于 2015-02-05T01:14:06.373 回答