From ca9de4592f586f5da81b23c35bcc1e49f03aeb10 Mon Sep 17 00:00:00 2001 From: Radek Date: Tue, 17 Dec 2024 12:28:49 +0000 Subject: [PATCH] sue secrets / urandom plus random.org --- app.py | 51 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/app.py b/app.py index b658a45..8e88c50 100644 --- a/app.py +++ b/app.py @@ -1,33 +1,56 @@ from flask import Flask, render_template, request, session -import random +import secrets import os -import time +import requests app = Flask(__name__) app.secret_key = 'your_secret_key' # Secret key for session management -# Function to generate random seed using system entropy -def generate_seed_from_entropy(): - seed = int((time.time() * 1000) % (2**32 - 1)) + os.getpid() + random.randint(0, 2**16 - 1) - return seed +# Function to combine secrets module and /dev/urandom for stronger randomness +def generate_secure_seed(): + # Generate a random value using secrets and urandom + urandom_value = int.from_bytes(os.urandom(8), 'big') + secure_value = secrets.randbits(64) + combined_seed = urandom_value ^ secure_value # Combine randomness using XOR + return combined_seed -# Function to generate random numbers based on lottery rules +# Function to fetch random numbers from Random.org API +def fetch_random_org_numbers(count, min_value, max_value): + try: + url = "https://www.random.org/integers/" + params = { + 'num': count, + 'min': min_value, + 'max': max_value, + 'col': 1, + 'base': 10, + 'format': 'plain', + 'rnd': 'new' + } + response = requests.get(url, params=params) + if response.status_code == 200: + numbers = [int(num) for num in response.text.strip().split()] + return sorted(numbers) + except Exception as e: + print(f"Error fetching from Random.org: {e}") + return None + +# Function to generate lottery numbers based on rules def generate_lottery_numbers(game_type, lines): - seed = generate_seed_from_entropy() - random.seed(seed) results = [] for _ in range(lines): if game_type == 'euromillions': - numbers = sorted(random.sample(range(1, 51), 5)) - lucky_stars = sorted(random.sample(range(1, 13), 2)) + numbers = fetch_random_org_numbers(5, 1, 50) or sorted(secrets.SystemRandom().sample(range(1, 51), 5)) + lucky_stars = fetch_random_org_numbers(2, 1, 12) or sorted(secrets.SystemRandom().sample(range(1, 13), 2)) results.append({'numbers': numbers, 'lucky_stars': lucky_stars}) elif game_type == 'lotto': - numbers = sorted(random.sample(range(1, 48), 6)) + numbers = fetch_random_org_numbers(6, 1, 47) or sorted(secrets.SystemRandom().sample(range(1, 48), 6)) results.append({'numbers': numbers}) elif game_type == 'eurodreams': - numbers = sorted(random.sample(range(1, 41), 6)) - dream_number = random.randint(1, 5) + numbers = fetch_random_org_numbers(6, 1, 40) or sorted(secrets.SystemRandom().sample(range(1, 41), 6)) + dream_number = fetch_random_org_numbers(1, 1, 5) + dream_number = dream_number[0] if dream_number else secrets.SystemRandom().randint(1, 5) results.append({'numbers': numbers, 'dream_number': dream_number}) else: return {'error': 'Invalid game type'}