示例安全代码:
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);
您可以按照这些步骤操作,
-
将所有想要的字符存储在阵列中
-
生成n(用户代码长度)个随机数,其中每个数字将代表数组的一个字符。
-
然后将新生成的字符连接起来,形成一个字符串
-
使用会话存储字符串,当用户询问时,只需将用户代码与会话匹配
您也可以使用类似的方法