
之前总是看到调侃要 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 事实上只要是程序,总是能作弊的。可以在软件上,或者是硬件上,甚至显示上,总是能做他人看不到的猫腻的。 要让大家信服的抽奖,只能依靠第三方客观数据(或者权威数据)生成随机数种子。比如 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 qwertyiuop 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 run2 2017-03-18 15:47:02 +08:00 我还见过直接用微信摇一摇的 -。- 其实感觉这样的节奏还行,谁也作不了弊(除非你加了抽奖主持的微信号,[可能]会再也摇不到你) |