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

2019-03-02 11:05:23 +08:00
 jss
需要为每个用户生成唯一 6~12 为不等的数字编号,切防穷举。
5812 次点击
所在节点    PHP
27 条回复
janus77
2019-03-02 17:09:11 +08:00
理论上纯数字是不可能防止穷举吧
我能想到的最好办法就是使用不定长的数字,比如有一个是 1,有一个是 451651,有一个是 6168406015
另外重点应该是在被破解的中间途径上加强防护
siyemiaokube
2019-03-02 18:31:34 +08:00
@janus77 你仔细想想,这只是把 10 个字符变成了不到 11 个字符而已,没什么区别
DreaMQ
2019-03-02 19:22:14 +08:00
随机不行吗?除非你的用户很多
superzmy
2019-03-03 03:25:02 +08:00
你需要一个映射函数,把实数空间 A 映射到 实数空间 B,具体做法可以用一个数用各种不同进制的混合表示,然后交换他们的位置。
简单来说 12345 这个十进制,交换百位和十位,可以映射为 12435。
在上述这种方案上叠加不同进制,再加入各种循环偏移量,你就得到一个不好破译的映射算法。这个算法写在服务端生成 id 号的地方,服务端内部有个普通自然数自增量,通过这个映射函数生成用户 id,这个 id 就会非常没有规律性。
msg7086
2019-03-03 11:53:57 +08:00
穷举本来就是最后一种方法,哪有防穷举这种东西。
比如我问你,我一年工资多少钱,精确到分。于是你从 0.01 开始穷举,一路往上到几百,几千,几万,总有一天能穷举出正确答案的。
你说的可能是防规律遍历。
atcdef
2019-03-03 15:51:21 +08:00
楼上说得有道理,穷举这事根本不能防,这本来就是最简单最有效的办法,只是时间问题而已。所以你要防的是怎么才能禁止别人多次尝试,比如强制每 ip 每 5 秒钟只能试一次之类的
linpf
2019-03-09 22:30:31 +08:00
参考最近雪碧活动生成的随机地址, 长度如果不能拉长,那么就连:#_这种符号都算有效字符。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX