哈希碰撞游戏公平性?
哈希碰撞算法验证
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)
注:算法仅提供参考,根据不同游戏规则,自行更改算法