2015-02-05 93 views
-1

我正在编写的程序要求用户在执行代码之前从管理员那里获取响应密码的挑战,并且是动态的(不是相同的挑战)。挑战信息需要简短,而且偶尔用户可以通过电话向其他人阅读。简单的挑战和响应密码

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

解决方案我试图避免:提供一个非常难以让人们口头交流给另一个人获得响应代码的加密密钥。

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

更新:

管理员将对用户信息的任何信息。我只是寻求一个简单的算法,如果存在的话,它不是一个简单的数学公式。用户面临的挑战是通过管理员可以用来提供响应值的算法自动生成。它可以是字母或数字,但它必须小而简单。

+0

拼写错误的单词或句子怎么样? – kbzombie

+0

为什么不是比上面那个更复杂的公式?那不行吗?管理员是否可以访问有关用户的任何信息,例如他们的用户名或计算机名称?你可以在你的加密代码中包含这些信息,这样对于'345'挑战的响应将因用户和机器而异。 –

+0

目前还不清楚你的要求是什么:密码是否需要自动生成?根据要求即时生成并重新生成?涉及多少人际互动?您是否允许在数据库中保存密码和/或挑战? –

回答

1

假设你有一些信息想要生成“密码”,你可以结合所有的信息片段,用盐(即SHA256)对它进行散列,并获得尽可能多的字节,如你发现有用的 - 比如2-3字节产生短号码。这样,您可以轻松地根据提供的数据重新计算相同的值以验证数据。

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

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

在某些附加信息(如数据库中最新版本的数据)中混合可能会让您有能力使这些令牌/有一次性令牌过期。

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