gpt4 book ai didi

php - 从 PHP 中的盐生成可验证的非连续整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:20 26 4
gpt4 key购买 nike

问题:我必须生成一个 n 位数的帐号。为了在根据任何持久性检查此号码之前帮助尽早验证该号码,我想验证该号码是我们的号码之一。 Luhn Algorithm将验证该号码是否与校验和匹配,但不会验证该号码的发行者是否有效。

这将如何(理想情况下)发生的示例:

  1. 生成连续帐号。
  2. 将序列号交给帐号生成器:

$accountNumber = 1; // doesn't matter, could be random
$generator = new Generator(getenv('ACCOUNT_SALT'));
echo $generator->generate($code); // output something like 83463476

后来:

$badCode = 83463475; // can't be right
$generator = new Generator(getenv('ACCOUNT_SALT'));
$generator->validate($badCode); // will return false because the number cannot be reached mathematically based on the salt.

虽然这不能防御暴力破解,但它确实提供了早期验证并且应该为我们提供非连续的帐号。问题是:有人知道可以执行此操作的算法吗?如果知道,他们能举个例子吗?

最佳答案

最后,我修改了我见过的用于双因素身份验证的标准一次性密码实现并使用了它。我们不使用计数器或计时器,而是使用按顺序递增的数字,并在基于 HMAC 的库中使用它,将生成的 HMAC 转换为“双因素代码”。

有 8 位数字的冲突,但我们可以丢弃生成的那些。这意味着所有帐户都是非连续的,并且如果我们知道生成帐号的原始种子,我们可以在源头快速测试任何帐号的完整性,而不是检查数据库。通过的账号不一定好,不通过的账号显然不好。

这确实让我想知道信用卡背面的最后三位数字是否在某种程度上与该系统相似,而正面的发行人之后的 12 位数字是否与此类似。

关于php - 从 PHP 中的盐生成可验证的非连续整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42650501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com