不用数据库, 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

......

这个该怎样实现?

5773 次点击
所在节点    程序员
61 条回复
fuxkcsdn
2021-08-23 15:52:30 +08:00
p.s.不要试图用 bcmath 拓展进行解密,超级慢。要解密的话用 gmp 拓展(只是相对 bcmath 快而已,数值大的话,解密也是慢)
tabris17
2021-08-23 15:57:54 +08:00
return (int)(time() / 10)
bixchen
2021-08-23 16:12:16 +08:00
单文件,反正都上服务器了。弄个 redis ttl 10min 是否存在,存在 return 不存在 create 然后 return
imluvian
2021-08-23 16:26:11 +08:00
楼主你这是想抽奖作弊啊?
Coder89757
2021-08-23 17:00:20 +08:00
面试题请自己做,谢谢。。。
Juszoe
2021-08-23 17:10:34 +08:00
每十分钟生成一个新的随机数,保存到全局变量里。
建议楼主描述清楚需求,不然又成一个 X-Y problem
shellus
2021-08-23 17:19:55 +08:00
其实你就是想生成一个动态的加密串,防止前端的加密串被拿去一直用。
所以每 10 分钟这个加密串就禁用了。前端必须重新获取,是吧?
不要重复造轮子了,这就是 JWT Auth
Hardrain
2021-08-23 17:32:22 +08:00
时间戳 /600 作为 random seed?
crab
2021-08-23 17:42:35 +08:00
对时间间隔取余来固定种子数值
yogogo
2021-08-23 20:49:16 +08:00
不要碰灰产
w3cll
2021-08-23 21:54:21 +08:00
@yogogo 看来你有故事
RRyo
2021-08-23 22:28:31 +08:00
时间戳除你需要的间隔,做种子生成随机数,更工程化的可以参考 2FA 的那套东西,很多现成的库
EscYezi
2021-08-23 22:34:41 +08:00
具体场景是怎么样的?
yuzo555
2021-08-23 22:44:00 +08:00
用 hash 算法,比如 md5,原文为 intval(time() / 600) 加上一个很长的盐值,然后取十六进制格式的最后几位(具体几位取决于你想要的数字大小范围),然后转为十进制数。
hefish
2021-08-23 23:32:51 +08:00
难得大家如此热情,我觉着这个需求莫名其妙,非常奇葩。 没有责怪 LZ 的意思,纯粹觉着需求奇葩。
huskyui
2021-08-24 00:15:43 +08:00
每天凌晨,可以预先生成一个满足数量的数组,然后打乱.根据时间点
GeruzoniAnsasu
2021-08-24 07:51:34 +08:00
@zoharSoul

鉴于本楼 lz 的问题已经得到解答了,歪个题,看看这算不算「五彩斑斓的黑」


gitdoit
2021-08-24 10:20:13 +08:00
题目半天没读明白,还有这么多人回答, 我觉得我脑子有问题
zjsxwc
2021-08-24 10:46:40 +08:00
如果不能用数据库等存储(文件系统也算数据库)的话,

每 10 秒恒定就说明你这个随机数是由你当前时间确定的,于是你这个随机根本就不是随机数!

如果不是随机数,那么解决楼主需求的办法确实只有用 rsa 非对称加密办法了,最多就是密钥每天换一个新的。
pckillers
2021-08-24 12:18:04 +08:00
@zjsxwc 把年月日也加进判断不就得了。 日期 + 时间(精确到 10 分钟) + 字符 做个 MD5 再随便想个公式变回数字。 也看起来差不多像随机数了。

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

https://tanronggui.xyz/t/797408

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

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

© 2021 V2EX