sue secrets / urandom plus random.org
This commit is contained in:
51
app.py
51
app.py
@@ -1,33 +1,56 @@
|
|||||||
from flask import Flask, render_template, request, session
|
from flask import Flask, render_template, request, session
|
||||||
import random
|
import secrets
|
||||||
import os
|
import os
|
||||||
import time
|
import requests
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.secret_key = 'your_secret_key' # Secret key for session management
|
app.secret_key = 'your_secret_key' # Secret key for session management
|
||||||
|
|
||||||
# Function to generate random seed using system entropy
|
# Function to combine secrets module and /dev/urandom for stronger randomness
|
||||||
def generate_seed_from_entropy():
|
def generate_secure_seed():
|
||||||
seed = int((time.time() * 1000) % (2**32 - 1)) + os.getpid() + random.randint(0, 2**16 - 1)
|
# Generate a random value using secrets and urandom
|
||||||
return seed
|
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):
|
def generate_lottery_numbers(game_type, lines):
|
||||||
seed = generate_seed_from_entropy()
|
|
||||||
random.seed(seed)
|
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
for _ in range(lines):
|
for _ in range(lines):
|
||||||
if game_type == 'euromillions':
|
if game_type == 'euromillions':
|
||||||
numbers = sorted(random.sample(range(1, 51), 5))
|
numbers = fetch_random_org_numbers(5, 1, 50) or sorted(secrets.SystemRandom().sample(range(1, 51), 5))
|
||||||
lucky_stars = sorted(random.sample(range(1, 13), 2))
|
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})
|
results.append({'numbers': numbers, 'lucky_stars': lucky_stars})
|
||||||
elif game_type == 'lotto':
|
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})
|
results.append({'numbers': numbers})
|
||||||
elif game_type == 'eurodreams':
|
elif game_type == 'eurodreams':
|
||||||
numbers = sorted(random.sample(range(1, 41), 6))
|
numbers = fetch_random_org_numbers(6, 1, 40) or sorted(secrets.SystemRandom().sample(range(1, 41), 6))
|
||||||
dream_number = random.randint(1, 5)
|
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})
|
results.append({'numbers': numbers, 'dream_number': dream_number})
|
||||||
else:
|
else:
|
||||||
return {'error': 'Invalid game type'}
|
return {'error': 'Invalid game type'}
|
||||||
|
|||||||
Reference in New Issue
Block a user