我在游戏公司,我们使用md5算法进行收费单检查。
以下是我们的工作方式:
在付费中心服务器和我们的游戏服务器上都有一个共同的"密钥"。
付费中心向我们的游戏服务器发送添加游戏币请求 其中有许多常规参数和一个名为" sign"
当我们在游戏服务器上收到请求时,我们使用md5("所有传统参数" +"密钥")来生成结果。
如果结果等于"符号"参数,我们将此收费订单视为有效订单。
我的问题是:
如果有人盲目地使用随机生成的"伪秘密密钥"用所有其他参数进行md5计算以产生符号 巧合的是,他用他的一个伪秘密密钥"做了一个有效的标志。
他需要尝试为每组"常规参数生成有效标志多少次?"
当pseudo-secret-key
碰巧生成有效secret-key
时,sign
与原始pseudo-secret-key
相同的机会有多少?
如果secret-key
与原始pseudo-key
不同,是否几乎无法使用conventional parameters
使用{{1}的其他不同组合生成有效符号}
答案 0 :(得分:1)
基本:md5哈希结果是均匀分布的。这可能是2 ^ 128中的1。
t
次尝试中计算归类的可能性:1 - (1 - 1 / (2 ^ 128)) ^ t
。例如,在2 ^ 128次尝试后,他有可能获得大约1/3。1/(2^128)
。