我试图验证掷骰子但是生成了错误的掷骰数字。我已经尝试过两个网站的官方验证脚本:
你能帮助我理解为什么我不能获得与网站相同的滚动数量......让我们关注primedice,因为我认为这个问题肯定是相似的。
primedice.com论坛的详细信息:
roll #20,549,462,672
server seed (hashed) : a72c7d6e95b7122dc21968505b91d729f4eef30af2c019488bb76274290ad183
client seed (nonced) : a9e65af098fe00229917de5659746dda-28
roll number shown on site: 35.02
我想在代码中使用的nonce有28个。所以我填充nodejs变量:
var clientSeed = "a9e65af098fe00229917de5659746dda";
var serverSeed =
"a72c7d6e95b7122dc21968505b91d729f4eef30af2c019488bb76274290ad183";
var nonce = 28;
//----- official roll function from primedice.com
var crypto = require('crypto');
var roll = function(key, text) {
var hash = crypto.createHmac('sha512', key).update(text).digest('hex');
var index = 0;
var lucky = parseInt(hash.substring(index * 5, index * 5 + 5), 16);
while (lucky >= Math.pow(10, 6)) {
index++;
lucky = parseInt(hash.substring(index * 5, index * 5 + 5), 16); //if we reach the end of the hash, just default to highest number
if (index * 5 + 5 > 128) {
lucky = 99.99;
break;
}
}
lucky %= Math.pow(10, 4);
lucky /= Math.pow(10, 2);
return lucky;
}
console.log(roll(serverSeed, clientSeed+'-'+nonce));
然后使用网站给出的滚动功能。 生成的结果是:
roll number generated : 50.64
所以50.64不是网站显示的内容==> 35.02
有什么想法吗?
答案 0 :(得分:2)
我明白问题是什么。这是要验证的卷
roll #20,549,462,672
server seed (hashed) :
a72c7d6e95b7122dc21968505b91d729f4eef30af2c019488bb76274290ad183
client seed (nonced) : a9e65af098fe00229917de5659746dda-28
如您所见,它显示“服务器种子(散列)”。您无法使用种子的散列表示来计算正确的值。你需要真正的种子来获得正确的数字。
了解真正的种子意味着你可以下注,并且100%肯定会在每次新的比赛中获胜。
因此,该服务不会让您看到用于让您下注的服务器种子。您必须进行种子更改,然后服务器将显示您上次会话使用的真实种子。
因此,您只能验证来自旧服务器种子的卷号,而不是来自当前服务器种子的卷号,因为出于安全原因,服务将保密。