之前总是看到调侃要 review 抽奖程序的梗,突发奇想,直接在 IDE 里抽奖效果如何。
1
aploium 2017-03-16 15:07:29 +08:00
为什么不用 html+js 或者 python 这样的脚本语言?_?
/*说不定人家直接魔改底层随机数生成器呢*/ |
3
mahone3297 2017-03-16 15:12:07 +08:00
这种录屏幕,是用什么程序?
|
4
zjcqoo 2017-03-16 15:14:17 +08:00 1
事实上只要是程序,总是能作弊的。可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。
要让大家信服的抽奖,只能依靠第三方客观数据(或者权威数据)生成随机数种子。比如 N 个城市的天气温度、 TOP 10 的股票数据等。之前写过一篇类似的: https://www.cnblogs.com/index-html/p/trusted-lottery-algorithm.html |
5
xuboying OP @zjcqoo 你的前提是大家相信你上了一个真网站(无劫持,无错误 api ,网站也没 bug ),得到了真数据,然后程序没有 bug ,生成了真随机数。。。
然后相信 "可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。"的说法不成里 ------------------------------- 我这个随机数是我手按 pause 的时刻生成的,你可以让任何人让来点,显然简单多了 代码就两行,小学生也能看懂, 然后相信 "可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。"的说法不成里 来吧,大家 review 我的代码吧 |
6
xuboying OP @mahone3297 LICEcap
|
7
shoaly 2017-03-16 15:27:03 +08:00
所以必须是第三方的, 比如我就觉得 微信群里面 发 100 元红包, 最高的前三名 对应线下的大奖. 应该是绝对公平了
|
10
aploium 2017-03-16 15:36:48 +08:00
扔硬币吧扔硬币吧
|
11
pungis 2017-03-16 15:44:34 +08:00
你这和 1 楼没有本质区别,可以作弊的地方多了
关键在于你没有让人绝对可以信服的证据 密码学里早就有可以绝对让人信服的公平抽奖法了 基于人,基于物理都不行 只有基于数学才是绝对可靠的 还是多学学吧 |
15
pungis 2017-03-16 16:03:54 +08:00
@xuboying
你是程序员吗?难以想象你问这种问题 一台运行 windows 的电脑可以有无数种作弊的地方好吗? windows api 不懂? i 的值是不是在文本框?我写个进程 SetWindowText 行不行? 你那结果最终不得是屏幕上显示?我覆盖一张图上去呢? 我的方法上面都说了,自行 google 密码学掷硬币及其扩展 |
16
caixiexin 2017-03-16 16:03:59 +08:00 via Android
信任体系是建立在有一个所有人都信任的权威存在,就像 HTTPS 的 CA 。
只要能说服所有人的话,剪刀石头布也能抽奖的嘛😌 |
17
xdeng 2017-03-16 16:06:08 +08:00
随机生成函数 就是你自己 =.=
|
18
shoaly 2017-03-16 16:06:48 +08:00
@xuboying 在场面上, 你说的话的真实性永远无法自证清白.
因为抽奖本身并不是一个科学, 说再多, 听者并不能懂, 也不想懂, 他们只会简单的觉得 这玩意是你做的, 所以你能"控制". 除非你跟抽奖这件事是完全不搭边, 毫无利益牵扯. 所以采用"第三方", 并不是从原理上更清白, 而是大家更容易相信 |
19
typcn 2017-03-16 16:14:31 +08:00
很简单啊。。。 Hook 一下绘图函数改数字就完了。。。。
改一行汇编直接换寄存器值都没问题 |
20
xuboying OP @pungis 我同意你说的可以用系统 api 来处里,有心要做这种事情,你要搞障眼法,那无数的办法都可以。梗里面只是要 review code ,就给大家一个最简单的可以行的办法,因为 code 的好坏也会左右抽奖结果,这个错误可能是无心引入的。既然要 review ,就 review 大家都看不懂的。
什么样的人群抽奖,要用什么样的方式 你在老年人忽悠中心高抽奖,如果你拿个乒乓球,他们会接受,你写个程序,他们会给你一堆问题,这个电脑会不会有硬件“问题”,有没有黑客,你没法用电脑给他们抽奖 梗是基于程序员的,年会抽奖,用的是熟悉的模式环境,熟悉的方法,你能想到的作弊我也能想到,一个 for 循环,估计没有任何流派的程序员看不懂吧, 你硬要讲 google 的密码学,那么请你帮台下几千名程序员先普及一下密码学的知识,大家不要吃饭吃菜,听你上面滔滔不绝 4 个小时,然后还是没有听懂啊啊啊啊啊 |
24
jiangzhuo 2017-03-16 17:19:33 +08:00
只要让所有人都信服就行了,无所谓公平不公平。本来大家就是想看看这群人里谁气运最好,奖品就归谁。既然是比气运就很容易了。
拿年会抽奖这事来说,所有人聚集到一个屋子里,密封好,放毒气,同时死掉,看来世谁投胎比较好就行了。 |
25
stnaw 2017-03-16 17:20:09 +08:00
用彩票号码当种子
|
26
EricInBj 2017-03-16 17:22:43 +08:00
我们抽奖是用北京车牌摇号一样的做法。
伪随机算法,签到顺序形成数组,抽下标。 种子数可以现场产生,每一桌随便找个人,说一个数字,然后把所有桌子的数字连起来。 当然也可以去第三方网站产生一个随机数。 不过现场产生的互动性效果好一点。 |
27
EricInBj 2017-03-16 17:23:58 +08:00
@sTnaw 这种有个问题,就是说种子得在抽奖编号产生之后确定下来才行。要不然还是可以操作的。过不了 review ,哈哈。
|
28
xierch 2017-03-16 19:47:36 +08:00
https://blog.sorz.org/p/p2p-lucky-draw/
谁来把这个实现一下吧( |
29
loading 2017-03-16 19:58:45 +08:00 via Android
随便拿一台手机,打开 codepen.io
用浏览器跑 js 。 |
30
xierch 2017-03-16 20:24:58 +08:00
@xierch 其实很简单啊,就是每个人自己生成一个随机数,藏着。所有人先公布 hash ,再公布随机数,
最后用所有人的随机数据合起来生成结果。只要保证自己的数别人猜不到,就行了。 先订好协议,取个帅气的名字,注册个时髦的域名,吸引不同的人写一些不同语言平台的开源实现。 抽奖的时候,无所谓的人看着就好;想参与的人自己掏出手机开个网页、装个 app ,注入熵;认真的人,自己 review 代码自己编译或者干脆自己照着协议写一个。 多好,现在就差一个程序员了。 |
31
sgissb1 2017-03-16 21:38:17 +08:00
关键你录屏的时候如何证明你没有插帧了?
|
33
RqPS6rhmP3Nyn3Tm 2017-03-17 02:44:05 +08:00 via iPhone
开个浏览器, random.org
再不济买个摇奖机,物理的怎么作弊 |
34
blackboar 2017-03-17 09:43:39 +08:00
你怎么保证 IDE 没被动过手脚!
问题的关键不在于用什么技术的,要找出一种办法让大多数人觉得公平就可以了,总是有个别人觉得有内幕有什么办法。 |
35
sgissb1 2017-03-17 10:23:22 +08:00
@xuboying 大哥,现在可以动态插入帧的。。。所以我只想说天下没有不舞弊的事情,因为不舞弊要做到公正公开。因为你直播也好,录播也罢,就算把人聚集在电脑前写代码抽奖也一样,如何证明每一幅画面就是原始的真实的。
|
40
sobigfish 2017-03-18 15:47:02 +08:00
我还见过直接用微信摇一摇的
-。- 其实感觉这样的节奏还行,谁也作不了弊(除非你加了抽奖主持的微信号,[可能]会再也摇不到你) |