请教一下:如何生成可以防穷举的数字编号 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jss
V2EX    PHP

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

  •  
  •   jss 2019-03-02 11:05:23 +08:00 via iPhone 6437 次点击
    这是一个创建于 2416 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需要为每个用户生成唯一 6~12 为不等的数字编号,切防穷举。
    27 条回复    2019-03-09 22:30:31 +08:00
    hu5ky
        1
    hu5ky  
       2019-03-02 11:08:39 +08:00 via Android
    加密
    lhx2008
        2
    lhx2008  
       2019-03-02 11:08:48 +08:00 via Android
    前面递增,后面加一个 4-8 位随机值就 ok
    rochek
        3
    rochek  
       2019-03-02 11:09:02 +08:00
    防穷举?
    那么为何一定要用数字
    英文字符,标点都加上去
    phy25
        4
    phy25  
       2019-03-02 11:11:41 +08:00 via Android
    phy25
        5
    phy25  
       2019-03-02 11:13:15 +08:00 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  
       2019-03-02 11:23:23 +08:00
    不如用大质数?哈哈
    参考 fail2ban 策略。
    gleox
        7
    gleox  
       2019-03-02 11:25:40 +08:00   1
    smallthing
        8
    smallthing  
       2019-03-02 11:26:14 +08:00 via iPhone
    不懂,还不是能穷举吗
    xiaopc
        9
    xiaopc  
       2019-03-02 11:43:16 +08:00 via Android
    是防遍历还是防被找出 ID 规律?
    119
        10
    119  
       2019-03-02 11:56:51 +08:00
    在固定位置加校验位
    qiayue
        11
    qiayue  
    PRO
       2019-03-02 11:58:46 +08:00
    12 位最大值千亿
    依然可以穷举
    asdqaz
        12
    asdqaz  
       2019-03-02 12:10:24 +08:00 via Android
    你这不就是激活码吗
    看看微软老人家的 25 位激活码
    asdqaz
        13
    asdqaz  
       2019-03-02 12:10:36 +08:00 via Android
    @asdqaz 原理类似激活码
    asdqaz
        14
    asdqaz  
       2019-03-02 12:28:57 +08:00 via Android
    哈希函数求值
    取前 12 位
    防破解加前缀后缀
    xxgirl2
        15
    xxgirl2  
       2019-03-02 12:48:59 +08:00
    snowflake+1
    MachineSpirit
        16
    MachineSpirit  
       2019-03-02 12:56:50 +08:00 via Android
    倒不如限制访问了,他们穷举肯定要一个一个试的。
    misaka19000
        17
    misaka19000  
       2019-03-02 13:01:20 +08:00
    纯数字的话,你这个可选数字太少了,穷举起来很简单
    lihongjie0209
        18
    lihongjie0209  
       2019-03-02 13:01:41 +08:00
    只要是数字,就可以穷举
    binsys
        19
    binsys  
       2019-03-02 13:04:08 +08:00
    hashid
    niknik
        20
    niknik  
       2019-03-02 14:09:12 +08:00
    uuid
    rb6221
        21
    rb6221  
       2019-03-02 17:09:11 +08:00
    理论上纯数字是不可能防止穷举吧
    我能想到的最好办法就是使用不定长的数字,比如有一个是 1,有一个是 451651,有一个是 6168406015
    另外重点应该是在被破解的中间途径上加强防护
    siyemiaokube
        22
    siyemiaokube  
       2019-03-02 18:31:34 +08:00 via iPhone
    @janus77 你仔细想想,这只是把 10 个字符变成了不到 11 个字符而已,没什么区别
    DreaMQ
        23
    DreaMQ  
       2019-03-02 19:22:14 +08:00 via iPhone
    随机不行吗?除非你的用户很多
    superzmy
        24
    superzmy  
       2019-03-03 03:25:02 +08:00
    你需要一个映射函数,把实数空间 A 映射到 实数空间 B,具体做法可以用一个数用各种不同进制的混合表示,然后交换他们的位置。
    简单来说 12345 这个十进制,交换百位和十位,可以映射为 12435。
    在上述这种方案上叠加不同进制,再加入各种循环偏移量,你就得到一个不好破译的映射算法。这个算法写在服务端生成 id 号的地方,服务端内部有个普通自然数自增量,通过这个映射函数生成用户 id,这个 id 就会非常没有规律性。
    msg7086
        25
    msg7086  
       2019-03-03 11:53:57 +08:00
    穷举本来就是最后一种方法,哪有防穷举这种东西。
    比如我问你,我一年工资多少钱,精确到分。于是你从 0.01 开始穷举,一路往上到几百,几千,几万,总有一天能穷举出正确答案的。
    你说的可能是防规律遍历。
    atcdef
        26
    atcdef  
       2019-03-03 15:51:21 +08:00
    楼上说得有道理,穷举这事根本不能防,这本来就是最简单最有效的办法,只是时间问题而已。所以你要防的是怎么才能禁止别人多次尝试,比如强制每 ip 每 5 秒钟只能试一次之类的
    linpf
        27
    linpf  
       2019-03-09 22:30:31 +08:00
    参考最近雪碧活动生成的随机地址, 长度如果不能拉长,那么就连:#_这种符号都算有效字符。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1468 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:27 PVG 00:27 LAX 09:27 JFK 12:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86