不用数据库, PHP 每 10 分钟内生成一个恒定随机数,该怎样实现?

2021-08-23 10:19:23 +08:00
 kisshere

api 请求一个 php 单文件,该 php 单文件(不调用数据库)每 10 分钟生成一个定值随机数,比如:

8:00~8:10 请求该 php,只输出定值 23

8:10~8:20 请求该 php,只输出定值 189

8:20~8:30 请求该 php,只输出定值 3

8:30~8:40 请求该 php,只输出定值 67

......

这个该怎样实现?

5739 次点击
所在节点    程序员
61 条回复
JKeita
2021-08-23 10:51:54 +08:00
srand 和 mt_srand 都是设置随机数种子,设置定值产生的随机数就一样了。
InDom
2021-08-23 10:52:13 +08:00
https://imgur.com/M5Zdlve

以整时间作为随机数种子,同 #11,非常不安全,随机数可推测,某种理论来说,这已经不是随机数了。
xytest
2021-08-23 10:55:59 +08:00
生成一个 写到 redis 十分钟过期。
RRRoger
2021-08-23 11:25:37 +08:00
生成随机数的目的就是不可预测。

你可以根据时间特性写个简单的算法。

比如在 8:00~8:10 你取 08:05 把所有的值(0,8,0,5)加起来得 13 然后通过 md5 算法, 从后往前取后面的整数位。

至于整数位的个数,你可以用时间里数字 0 的个数。

这样肉眼不可预测, 也能达到随机效果
lxz6597863
2021-08-23 11:36:50 +08:00
now := time.Now().Unix()
fmt.Println(now - (now % 600))

//600 秒 == 10 分钟
boboliu
2021-08-23 12:19:43 +08:00
boboliu
2021-08-23 12:22:35 +08:00
ganbuliao
2021-08-23 12:26:16 +08:00
那就很简单 8:00~8:10 就用 8:00 做这个加密算法的 value 不就行了 加密算法 就 什么随便的加减乘除一下 在截取一下就搞定了
summerLast
2021-08-23 12:34:57 +08:00
日期取 yyyyMMddHHm
summerLast
2021-08-23 12:35:29 +08:00
@summerLast 在复杂点 求个 hash
summerLast
2021-08-23 12:36:03 +08:00
@summerLast 在复杂点加盐 求个 hash
wavingclear
2021-08-23 12:46:23 +08:00
抄一下网银实体数字密保、steam 手机验证器之类的离线随机数生成器的算法,他们几十秒更新一次你 10 分钟更新一次。
binux
2021-08-23 12:54:45 +08:00
随便找一个随机数算法,取第时间 offset/10min 个数就行了。
bghtyu
2021-08-23 12:59:06 +08:00
就是 totp,Google 身份验证器那种
eason1874
2021-08-23 13:30:05 +08:00
不用自己实现,找个 TOTP 类,把间隔时间(默认是 30 秒或 60 秒)改成 600 秒就 OK 了
neptuno
2021-08-23 13:52:41 +08:00
是所有人都返回同一个随机数还是每个人随机数不同?所有人的话,生成一个随机数,缓存下来,后面的十分钟就返回这个随机数。每个人不同的话 totp
feikeq
2021-08-23 14:16:38 +08:00
你是不是要做动态令牌。。。。。我以前做过动态密码每天密码不一样的那种
mingl0280
2021-08-23 14:30:31 +08:00
yyyyMMddHH 加上分钟取整加上 uid 哈希。totp 啊……
Lemeng
2021-08-23 15:35:50 +08:00
需求写的不是特别清楚
fuxkcsdn
2021-08-23 15:48:57 +08:00
rsa 加密当前时间戳,保证恒定,保证随机

bcmod(bcpow(time(), $e), $n)

其中的 e 和 n 参数定义见
https://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

https://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

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

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

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

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

© 2021 V2EX