检查是否有任何特定字符长度的唯一标记
Check if there are any unique tokens left of a certain character length
我有一个 Post 模型,其属性为 token
。
我正在使用 SecureRandom.urlsafe_base64(length_of_token)
创建令牌。
令牌不需要是不可猜测的,但必须是唯一的。
我从 1 个字符长的标记开始,当它们全部用完(所有 64 种组合)时,我应该继续使用 2 个字符长的标记。
我应该如何检查 3 个字符长的令牌是否还有任何令牌变体?
它会是这样的:
64**n - Post.count(:token).where('char_length(token) = ?', n)
第一部分给出可能的组合数,第二部分给出标记长度为 n 的记录数。
但请不要忘记,您的随机生成器不一定会生成剩余的可能组合。随着时间的推移,碰撞会呈指数级增长,因此我强烈反对这种实施方式。
注意:char_length
语句是 MySQL 特定的,因此根据您的 RDBMS,您必须调整这部分。
我有一个 Post 模型,其属性为 token
。
我正在使用 SecureRandom.urlsafe_base64(length_of_token)
创建令牌。
令牌不需要是不可猜测的,但必须是唯一的。
我从 1 个字符长的标记开始,当它们全部用完(所有 64 种组合)时,我应该继续使用 2 个字符长的标记。
我应该如何检查 3 个字符长的令牌是否还有任何令牌变体?
它会是这样的:
64**n - Post.count(:token).where('char_length(token) = ?', n)
第一部分给出可能的组合数,第二部分给出标记长度为 n 的记录数。
但请不要忘记,您的随机生成器不一定会生成剩余的可能组合。随着时间的推移,碰撞会呈指数级增长,因此我强烈反对这种实施方式。
注意:char_length
语句是 MySQL 特定的,因此根据您的 RDBMS,您必须调整这部分。