创建一个唯一的哈希

 mobiledu2502940265 发布于 2022-12-04 12:44

我需要创建一个与数据库中的ID对应的唯一哈希.我是否应该生成一个随机的字母数字哈希,然后将其存储在数据库中的特定行中?

现在这就是我正在做的事情,但我需要确保人们无法弄清楚创建这些哈希值的算法.

params[:slug].to_i(36)

id.to_s(36)

yeyo.. 5

实际上很简单:

enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation
enum.next.join
 => "qmrbSTBu6gGpMs4Jh0VZAiI9cW58jxoDz2NwL1eUClaFtdRXfPEOYQnvkKy7H3"

这提供了 factorial(62)uniq字符串/ uids.(非常多!)

permutation如果你想要更短的字符串/ uid,你也可以提供一个限制,但这会减少你可以生成的uniq字符串/ uids的数量.

enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation(13)
enum.next.join
 => "A1BD3qljTKpOm"

如果您担心安全性,那么使用安全的随机种子对阵列进行洗牌:

ary = [*'a'..'z', *'A'..'Z', *0..9].shuffle(random: SecureRandom.hex(23).to_i(16))
enum = ary.permutation(13)
enum.next.join
 => "9bNmv82ruBKjq"

唯一性是保证(因此有限),没有调用数据库或测试唯一性的开销.

1 个回答
  • 实际上很简单:

    enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation
    enum.next.join
     => "qmrbSTBu6gGpMs4Jh0VZAiI9cW58jxoDz2NwL1eUClaFtdRXfPEOYQnvkKy7H3"
    

    这提供了 factorial(62)uniq字符串/ uids.(非常多!)

    permutation如果你想要更短的字符串/ uid,你也可以提供一个限制,但这会减少你可以生成的uniq字符串/ uids的数量.

    enum = [*'a'..'z', *'A'..'Z', *0..9].shuffle.permutation(13)
    enum.next.join
     => "A1BD3qljTKpOm"
    

    如果您担心安全性,那么使用安全的随机种子对阵列进行洗牌:

    ary = [*'a'..'z', *'A'..'Z', *0..9].shuffle(random: SecureRandom.hex(23).to_i(16))
    enum = ary.permutation(13)
    enum.next.join
     => "9bNmv82ruBKjq"
    

    唯一性是保证(因此有限),没有调用数据库或测试唯一性的开销.

    2022-12-11 02:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有