首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jss
V2EX  ›  PHP

请教一下:如何生成可以防穷举的数字编号

  •  
  •   jss · 327 天前 via iPhone · 3579 次点击
    这是一个创建于 327 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需要为每个用户生成唯一 6~12 为不等的数字编号,切防穷举。
    27 回复  |  直到 2019-03-09 22:30:31 +08:00
    hu5ky
        1
    hu5ky   327 天前 via Android
    加密
    lhx2008
        2
    lhx2008   327 天前 via Android
    前面递增,后面加一个 4-8 位随机值就 ok
    rochek
        3
    rochek   327 天前
    防穷举?
    那么为何一定要用数字
    英文字符,标点都加上去
    phy25
        4
    phy25   327 天前 via Android
    phy25
        5
    phy25   327 天前 via Android
    好吧,没有仔细看要求……不过上面的库的介绍提到了 If you need your ids to consist of only numbers, check out Optimus. It's based on Knuth's integer hash method and produces obfuscated integer ids (and does it faster too). There are PHP and Go implementations.
    loading
        6
    loading   327 天前
    不如用大质数?哈哈
    参考 fail2ban 策略。
    gleox
        7
    gleox   327 天前   ♥ 1
    smallthing
        8
    smallthing   327 天前 via iPhone
    不懂,还不是能穷举吗
    xiaopc
        9
    xiaopc   327 天前 via Android
    是防遍历还是防被找出 ID 规律?
    shiyidi
        10
    shiyidi   327 天前
    在固定位置加校验位
    qiayue
        11
    qiayue   327 天前
    12 位最大值千亿
    依然可以穷举
    asdqaz
        12
    asdqaz   327 天前 via Android
    你这不就是激活码吗
    看看微软老人家的 25 位激活码
    asdqaz
        13
    asdqaz   327 天前 via Android
    @asdqaz 原理类似激活码
    asdqaz
        14
    asdqaz   327 天前 via Android
    哈希函数求值
    取前 12 位
    防破解加前缀后缀
    xxgirl2
        15
    xxgirl2   327 天前
    snowflake+1
    MachineSpirit
        16
    MachineSpirit   327 天前 via Android
    倒不如限制访问了,他们穷举肯定要一个一个试的。
    misaka19000
        17
    misaka19000   327 天前
    纯数字的话,你这个可选数字太少了,穷举起来很简单
    lihongjie0209
        18
    lihongjie0209   327 天前
    只要是数字,就可以穷举
    binsys
        19
    binsys   327 天前
    hashid
    niknik
        20
    niknik   327 天前
    uuid
    janus77
        21
    janus77   326 天前
    理论上纯数字是不可能防止穷举吧
    我能想到的最好办法就是使用不定长的数字,比如有一个是 1,有一个是 451651,有一个是 6168406015
    另外重点应该是在被破解的中间途径上加强防护
    siyemiaokube
        22
    siyemiaokube   326 天前 via iPhone
    @janus77 你仔细想想,这只是把 10 个字符变成了不到 11 个字符而已,没什么区别
    DreaMQ
        23
    DreaMQ   326 天前 via iPhone
    随机不行吗?除非你的用户很多
    superzmy
        24
    superzmy   326 天前
    你需要一个映射函数,把实数空间 A 映射到 实数空间 B,具体做法可以用一个数用各种不同进制的混合表示,然后交换他们的位置。
    简单来说 12345 这个十进制,交换百位和十位,可以映射为 12435。
    在上述这种方案上叠加不同进制,再加入各种循环偏移量,你就得到一个不好破译的映射算法。这个算法写在服务端生成 id 号的地方,服务端内部有个普通自然数自增量,通过这个映射函数生成用户 id,这个 id 就会非常没有规律性。
    msg7086
        25
    msg7086   326 天前
    穷举本来就是最后一种方法,哪有防穷举这种东西。
    比如我问你,我一年工资多少钱,精确到分。于是你从 0.01 开始穷举,一路往上到几百,几千,几万,总有一天能穷举出正确答案的。
    你说的可能是防规律遍历。
    atcdef
        26
    atcdef   325 天前
    楼上说得有道理,穷举这事根本不能防,这本来就是最简单最有效的办法,只是时间问题而已。所以你要防的是怎么才能禁止别人多次尝试,比如强制每 ip 每 5 秒钟只能试一次之类的
    linpf
        27
    linpf   319 天前
    参考最近雪碧活动生成的随机地址, 长度如果不能拉长,那么就连:#_这种符号都算有效字符。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2023 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    ♥ Do have faith in what you're doing.