安全代码中需要不同的字符


Require Different Characters in a Security Code

示例安全代码:

a35sfj9ksdf

我如何询问用户安全代码的几个字符(例如第一个、第四个和第九个),然后检查这些字符?主要的困难在于如何以加密的形式存储安全代码——如果我单独存储每个字符,那么加密将非常容易被破坏。

这里和"如何存储和验证从PIN/密码中随机选择的数字"中都没有描述的一种可能性是:

  • 创建一个与seucrity代码长度相同的随机salt(此处11)
  • 与用户一起储存盐
  • 对于安全代码的每个字符,替换相应的字符将salt与安全代码中的char进行比较,并安全地对其进行散列
  • 将这些哈希存储在用户中

现在,您必须为长度为n的安全代码存储可管理数量的n+1个字段,并且仍然可以验证单个(位置,字符)元组

使用substr()怎么样?

substr("a35sfj9ksdf", 0, 1);

这将返回"a",第一个字符

substr("a35sfj9ksdf", 4, 1);

这将返回4,第5个字符

因此,请输入$n字符并使用

substr("a35sfj9ksdf", $n-1, 1);

您可以按照这些步骤操作,

  1. 将所有想要的字符存储在阵列中

  2. 生成n(用户代码长度)个随机数,其中每个数字将代表数组的一个字符。

  3. 然后将新生成的字符连接起来,形成一个字符串

  4. 使用会话存储字符串,当用户询问时,只需将用户代码与会话匹配

您也可以使用类似的方法

创建一个简单的captcha服务