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

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

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