哈希碰撞游戏公平性?

哈希碰撞游戏公平性?

哈希碰撞算法验证
serverSeed = 服务器种子
serverSeed_SHA256 = 服务器种子(散列化)
clientSeed = 客户端种子
nonce = 随机数
cursor = 游标(碰撞算法 默认为 0 )

根据 HMAC_SHA256 算法 得出16进制 取前8组 转10 进制

HMAC_SHA256(522be90560c64dd44480a1da68ae01d4fd344341646a13321abe14bcfc16615d,f3nz1JkA2k:6)
2e	61	25	99	f8	8c	37	3f	b8	95	7c	b0	b8	4f	98	47	dd	c4	0b	3d	4a	08	f8	8a	fb	b7	ff	37	f3	be	30	00
46	97	37	153	248	140	55	63	184	149	124	176	184	79	152	71	221	196	11	61	74	8	248	138	251	183	255	55	243	190	48	0

字节到数字
(46, 97, 37, 153) -> [0, ..., 16777215] = 3039525
0	.179687500000	(046 / (256 ^ 1 ))
+	0	.001480102539	(097 / (256 ^ 2 ))
+	0	.000002205372	(037 / (256 ^ 3 ))
+	0	.000000035623	(153 / (256 ^ 4 ))
=	0	.181169843534	(* 16777216)
=	3039525	.597656250000

最终哈希碰撞 计算公式 :16777216 / (3039525 + 1) * (1 - 0.01) = 5.464484870338335

在这里插入图片描述
在这里插入图片描述
Python 3 +

from hashlib import sha256
import hmac

def main():
    serverSeed = "522be90560c64dd44480a1da68ae01d4fd344341646a13321abe14bcfc16615d"
    clientSeed = "f3nz1JkA2k"
    nonce = "6"
    cursor = 0  # 默认为0
    data = str(clientSeed) + ":" + str(nonce) + ":" + str(cursor)
    un = num(i=data,x=serverSeed)
    print("得出结果:",un)
def num(i,x):
    x = hmac_sha256(data=i, key=x)
    d = [x[0:2], x[2:4], x[4:6], x[6:8]]
    e = 0
    v = 0
    for i in d:
        v = v + 1
        inx = int(i, 16)
        if inx < 100:
            inx = -inx
        stn = "%.12f" % float(inx / (256 ** v))
        Set = stn.replace('-', '')
        e = e + float(Set)
    n = "%.12f" % e
    m = float(n) * 16777216
    num = 16777216 / int(m + 1) * 0.99
    return num

def hmac_sha256(key, data):
    key = key.encode('utf8')
    data = data.encode('utf8')
    encrypt_data = hmac.new(key, data, digestmod=sha256).hexdigest()
    return encrypt_data

if __name__ == '__main__':
    main()

print(得出结果:5.464484870338335)

注:算法仅提供参考,根据不同游戏规则,自行更改算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值