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
......
这个该怎样实现?
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
......
这个该怎样实现?
|
1
if elseif else
Switch .... |
|
dallasluAug 23, 2021
2
8:00~8:10 请求该 php:base_convert(md5('8:00'), 16, 10) % MAX_VALUE
8:10~8:20 请求该 php:base_convert(md5('8:10'), 16, 10) % MAX_VALUE |
|
yousabukAug 23, 2021 via iPhone
3
说的再详细写才好看
|
|
yEhwG10ZJa83067xAug 23, 2021
4
定值随机数 怎么理解?
|
|
5
定值还叫随机数?
五彩斑斓的黑是吧 |
|
6
估计是不重复的随机数吧
|
|
7
把 10 分钟当作随机数的种子,同一个 10 分钟内返回的都是同一个随机数
|
|
hauziAug 23, 2021
8
直接用 cache 吧,10 分钟过期重新生成
|
|
dinghmcnAug 23, 2021
9
要第一次随机,其后直接使用该值?
每次先检查当前时段随机值是否存在,不存在就取一个随机值并保存起来 |
|
10
<?php
define('MY_SUPER_SECRET_CONSTANT', 123456789); srand(intval(time() / 600) + MY_SUPER_SECRET_CONSTANT); echo rand(0, 500); |
|
11
以及我给的方法非常不安全(意味着该随机数可推测)。
|
|
keepeyeAug 23, 2021
12
楼主的意思是,10 分钟内只生成一次随机数,多次请求返回缓存值。所以用缓存就行了啊,往 /tmp/目录下写个缓存文件,把时间、数值记录进去,每次读取,判断时间决定要不要重新生成
|
|
13
你是不是在找:totp
|
|
JKeitaAug 23, 2021
16
$t = time();
$t = $t - $t%600; srand($t); $v = rand(); echo $v; |
|
pengtdydAug 23, 2021
18
大胆猜测一下,这个问题的背后必然有一个伞兵的产品经理
|
|
hxnetsAug 23, 2021
19
恒定随机数???
|
|
JKeitaAug 23, 2021
21
srand 和 mt_srand 都是设置随机数种子,设置定值产生的随机数就一样了。
|
|
InDomAug 23, 2021
22
|
|
byteXAug 23, 2021
23
生成一个 写到 redis 十分钟过期。
|
|
RRRogerAug 23, 2021
24
生成随机数的目的就是不可预测。
你可以根据时间特性写个简单的算法。 比如在 8:00~8:10 你取 08:05 把所有的值(0,8,0,5)加起来得 13 然后通过 md5 算法, 从后往前取后面的整数位。 至于整数位的个数,你可以用时间里数字 0 的个数。 这样肉眼不可预测, 也能达到随机效果 |
|
lxz6597863Aug 23, 2021
25
now := time.Now().Unix()
fmt.Println(now - (now % 600)) //600 秒 == 10 分钟 |
|
boboliuAug 23, 2021
26
|
|
boboliuAug 23, 2021
27
|
|
ganbuliaoAug 23, 2021
28
那就很简单 8:00~8:10 就用 8:00 做这个加密算法的 value 不就行了 加密算法 就 什么随便的加减乘除一下 在截取一下就搞定了
|
|
summerLastAug 23, 2021
29
日期取 yyyyMMddHHm
|
|
summerLastAug 23, 2021
30
@summerLast 在复杂点 求个 hash
|
|
summerLastAug 23, 2021
31
@summerLast 在复杂点加盐 求个 hash
|
|
wavingclearAug 23, 2021
32
抄一下网银实体数字密保、steam 手机验证器之类的离线随机数生成器的算法,他们几十秒更新一次你 10 分钟更新一次。
|
|
binuxAug 23, 2021 via Android
33
随便找一个随机数算法,取第时间 offset/10min 个数就行了。
|
|
bghtyuAug 23, 2021 via Android
34
就是 totp,Google 身份验证器那种
|
|
eason1874Aug 23, 2021
35
不用自己实现,找个 TOTP 类,把间隔时间(默认是 30 秒或 60 秒)改成 600 秒就 OK 了
|
|
neptunoAug 23, 2021
36
是所有人都返回同一个随机数还是每个人随机数不同?所有人的话,生成一个随机数,缓存下来,后面的十分钟就返回这个随机数。每个人不同的话 totp
|
|
feikeqAug 23, 2021
37
你是不是要做动态令牌。。。。。我以前做过动态密码每天密码不一样的那种
|
|
mingl0280Aug 23, 2021 via Android
38
yyyyMMddHH 加上分钟取整加上 uid 哈希。totp 啊……
|
|
LemengAug 23, 2021
39
需求写的不是特别清楚
|
|
fuxkcsdnAug 23, 2021 via iPhone
40
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 |
|
fuxkcsdnAug 23, 2021 via iPhone
41
p.s.不要试图用 bcmath 拓展进行解密,超级慢。要解密的话用 gmp 拓展(只是相对 bcmath 快而已,数值大的话,解密也是慢)
|
|
tabris17Aug 23, 2021
42
return (int)(time() / 10)
|
|
bixchenAug 23, 2021
43
单文件,反正都上服务器了。弄个 redis ttl 10min 是否存在,存在 return 不存在 create 然后 return
|
|
imluvianAug 23, 2021 via Android
44
楼主你这是想抽奖作弊啊?
|
|
Coder89757Aug 23, 2021
45
面试题请自己做,谢谢。。。
|
|
JuszoeAug 23, 2021
46
每十分钟生成一个新的随机数,保存到全局变量里。
建议楼主描述清楚需求,不然又成一个 X-Y problem |
|
shellusAug 23, 2021
47
其实你就是想生成一个动态的加密串,防止前端的加密串被拿去一直用。
所以每 10 分钟这个加密串就禁用了。前端必须重新获取,是吧? 不要重复造轮子了,这就是 JWT Auth |
|
HardrainAug 23, 2021
48
时间戳 /600 作为 random seed?
|
|
crabAug 23, 2021
49
对时间间隔取余来固定种子数值
|
|
50
不要碰灰产
|
|
RRyoAug 23, 2021 via iPhone
52
时间戳除你需要的间隔,做种子生成随机数,更工程化的可以参考 2FA 的那套东西,很多现成的库
|
|
EscYeziAug 23, 2021 via iPhone
53
具体场景是怎么样的?
|
|
yuzo555Aug 23, 2021
54
用 hash 算法,比如 md5,原文为 intval(time() / 600) 加上一个很长的盐值,然后取十六进制格式的最后几位(具体几位取决于你想要的数字大小范围),然后转为十进制数。
|
|
hefishAug 23, 2021
55
难得大家如此热情,我觉着这个需求莫名其妙,非常奇葩。 没有责怪 LZ 的意思,纯粹觉着需求奇葩。
|
|
huskyuiAug 24, 2021
56
每天凌晨,可以预先生成一个满足数量的数组,然后打乱.根据时间点
|
|
GeruzoniAnsasuAug 24, 2021
57
|
|
gitdoitAug 24, 2021
58
题目半天没读明白,还有这么多人回答, 我觉得我脑子有问题
|
|
zjsxwcAug 24, 2021
59
如果不能用数据库等存储(文件系统也算数据库)的话,
每 10 秒恒定就说明你这个随机数是由你当前时间确定的,于是你这个随机根本就不是随机数! 如果不是随机数,那么解决楼主需求的办法确实只有用 rsa 非对称加密办法了,最多就是密钥每天换一个新的。 |
|
pckillersAug 24, 2021
60
@zjsxwc 把年月日也加进判断不就得了。 日期 + 时间(精确到 10 分钟) + 字符 做个 MD5 再随便想个公式变回数字。 也看起来差不多像随机数了。
|
|
raysonluAug 25, 2021
61
就题目看,明显就 if else 完事,但感觉明显就是题目需求都没有说清楚
|