有一个网站可以玩轮盘赌,你只能穿上颜色(红,黑=双,绿=14x)
卷数通过以下方式计算:
每 24 小时就有一个服务器种子,它不同 这是过去某个时间生成的预先计算值。 种子是在链中生成的,这样今天的种子就是明天种子的哈希值。由于无法反转 SHA-256,我们可以通过从预先计算的链向后工作来证明每个种子是提前生成的。
也有lotto和round_id,但它们只给出了serverSeed,直到第二天才隐藏。
示例:
$server_seed = "39b7d32fcb743c244c569a56d6de4dc27577d6277d6cf155bdcba6d05befcb34";
$lotto = "0422262831";
$round_id = "1";
$hash = hash("sha256",$server_seed."-".$lotto."-".$round_id);
$roll = hexdec(substr($hash,0,8)) % 15;
echo "Round $round_id = $roll";
这就是每轮生成新哈希值的方式,因为每轮 ID 都会增加 1,服务器种子和乐透全天保持不变。
网站上还有一个历史页面,您可以查看过去每一个滚动的颜色和号码。
我的问题:有没有办法通过已经滚动的数字来计算下一次滚动? (我不是在谈论逆向 SHA256 serverSeed 或类似的东西!!!)
但这真的没有数学吗?
我知道它可能是随机的,但我无法想象这是随机的。
这是昨天的卷,您也可以在其中看到轮 ID。
我有时看到面包卷重复很多次,但有时却不是......我不敢相信其中没有任何数学知识。
等待答案...
该方法是NIST SP 800-108中定义的“计数器模式下的 KDF”示例,其中 SHA256 为“PRF”。据我所知,这种方法被认为是一种安全的随机数生成器。所以答案是“这里面没有数学,重复只是运气”。
можно попробовать сделать,что то подобное как в коде,что я представлю ниже,результатов можно добиться вплоть до 19 угадываний подряд
// Загрузка базы хешей из localStorage
const hashDatabase = loadHashDatabase();
function loadHashDatabase() {
const storedData = localStorage.getItem("hashDatabase");
return storedData ? JSON.parse(storedData) : {};
}
function saveHashDatabase() {
localStorage.setItem("hashDatabase", JSON.stringify(hashDatabase));
}
// Функция получения хеша из DOM
function getHash() {
const hashElement = document.querySelector("#doubleHash");
return hashElement ? hashElement.textContent.trim() : null;
}
// Функция для вычисления SHA256
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
}
// Преобразование хеша в результат (0-14)
function hashToResult(hash) {
const numericValue = BigInt('0x' + hash);
return Number(numericValue % BigInt(15)); // Диапазон от 0 до 14
}
// Функция для ставки
function placeBet(color, amount) {
const betAmountInput = document.querySelector("#doubleInputBet");
if (betAmountInput) {
betAmountInput.value = amount;
const betButton = document.querySelector(`.sectorsBets .${color}`);
if (betButton) {
betButton.click();
console.log(`Ставка на ${color} сделана: ${amount}`);
} else {
console.log(`Кнопка для цвета ${color} не найдена.`);
}
} else {
console.log("Поле для ввода ставки не найдено.");
}
}
// Основная логика для ставок
async function makeBet() {
const currentHash = getHash();
if (!currentHash) {
console.log("Хеш не найден.");
return;
}
if (hashDatabase[currentHash]) {
// Если хеш известен, используем сохраненный результат
const savedResult = hashDatabase[currentHash];
console.log(`Хеш уже известен. Результат: ${savedResult}`);
if (savedResult === 0 && !hasGreenBetPlaced) {
placeBet('green', bettingAmountGreen);
hasGreenBetPlaced = true; // Фиксируем, что ставка на зеленый сделана
} else if (savedResult >= 1 && savedResult <= 7) {
placeBet('red', bettingAmountOther);
} else if (savedResult >= 8 && savedResult <= 14) {
placeBet('black', bettingAmountOther);
}
} else {
// Если хеш новый, рассчитываем и сохраняем результат
const resultHash = await sha256(currentHash);
const predictedResult = hashToResult(resultHash);
console.log(`Новый хеш: ${currentHash}`);
console.log(`Рассчитанный результат: ${predictedResult}`);
hashDatabase[currentHash] = predictedResult; // Сохраняем в базу
saveHashDatabase();
if (predictedResult === 0 && !hasGreenBetPlaced) {
placeBet('green', bettingAmountGreen);
hasGreenBetPlaced = true;
} else if (predictedResult >= 1 && predictedResult <= 7) {
placeBet('red', bettingAmountOther);
} else if (predictedResult >= 8 && predictedResult <= 14) {
placeBet('black', bettingAmountOther);
}
}
}