关于论坛抽奖

最近比较流行论坛抽奖
但由于种种因素,中奖楼层会提前被部分人得知(被C了 or 能被计算),抽奖就演变成了抢楼…

为了方便起见,我们把发起抽奖的人称为主办方,抽奖的人称为水友

那么如何避免抢楼的情况呢?不能让水友提前得知中奖楼层(至少无法轻易计算得知)。
需要做到对于水友来说中奖楼层事先无法预测事后公开可查,通俗来讲就是 计算和验证非对称,基于这一点,可以衍生两种思路:

  • 非对称加密
  • 工作量证明

基于环保和低碳的理念,我们选择第一种思路,下面使用rsa举个栗子:

  1. 主办方生成两个大素数
  2. 确定中奖楼层算法(例如:较小的素数 mod 500)
  3. 抽奖时公布算法和两个素数的乘积
  4. 抽奖截至后需要公布较小的素数,方便水友验算

由于大数分解的不对称性,在主办方公布素数前,水友很难得到这两个素数,自然无法计算中奖楼层;在主办方公布素数后,水友很容易验证中奖楼层的正确性。

这里还有一个问题,主办方其实是知道中奖楼层的,上述过程无法防止和主办方进行py交易得到中奖楼层,那么怎么办呢?让水友参与算法,下面是优化后的过程:

  1. 主办方生成两个大素数
  2. 确定中奖结束的时间
  3. 确定中奖楼层算法(例如:较小的素数 mod 有效时间内的总楼层)
  4. 抽奖时公布算法和两个素数的乘积
  5. 抽奖截至后需要公布较小的素数,方便水友验算

这样也能够解决中奖楼层范围公布导致烂尾楼的问题(鼓励回复)
最后贴个码:

from crypto_plus import CryptoPlus

def generate(bits=4096):
    rsa = CryptoPlus.generate_rsa(bits)
    p = rsa.private_key.p
    q = rsa.private_key.q
    n = rsa.private_key.n
    m_min = min(p, q)
    return n, m_min

if __name__ == '__main__':
    print(generate())

来个免费的赞呐 :hand_with_index_finger_and_thumb_crossed: :hand_with_index_finger_and_thumb_crossed:

15 个赞

沙发

1 个赞

水王哭晕在厕所

1 个赞

mark

1 个赞

6得狠

1 个赞

没有必要这么麻烦,直接抽奖就行了。

2 个赞

没法防止py交易啊,我直接搞个小号中奖骗回复你当如何应对 :sweat_smile:

1 个赞

不错

1 个赞

Mark

2 个赞

常规话题搞七捻三

我送福利的帖子
限制三级 先到先得
主打一个公平

3 个赞

我更喜欢确定性
不喜欢抽奖这些虚的

5 个赞

没get到你的点,我这个脚本是取随机数的,抽奖的时候会先检测当前楼层总数,然后在这之间抽取随机数。

就算自己去占楼,也不一定中吧?

2 个赞

但是有没有一种可能
版主可以锁帖
(当然我不可能这么玩,不过确实可以)

2 个赞

怎么知道是随机呢?我指定我的小号,说是随机选择的,你也没有验证手段啊

1 个赞

第二种可能
就是c号
罗翔开一个小号
张三开十个
每个小号娶八个老婆

1 个赞

你三级的帖子,有没有一种可能,我是二级号,没法嫖 :sweat_smile:

1 个赞

群众里面有坏人
经常举报我
所以福利仅限三级捏

ps:真是太坏了

2 个赞

水不起来了

1 个赞

可以用当天收盘的沪深指数

2 个赞