Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как добавить в код python систему временных ключей

bdhdb vcbdbd Ученик (98), открыт 1 неделю назад
Возможно ли создать систему генерации ключей для использования программы ,написанной на python?
Что-то типо:введите одноразовый ключ для использования программы.
2 ответа
Руслан Коблев Профи (711) 1 неделю назад
import hashlib
import datetime

# Функция для генерации временного ключа
def generate_temp_key(secret, validity_days):
# Получаем текущую дату и преобразуем её в строку
current_date = datetime.datetime.now ().strftime('%Y-%m-%d')
# Генерируем ключ, используя секрет и текущую дату
key = hashlib.sha256(f"{secret}{current_date}".encode()).hexdigest()
expiry_date = datetime.datetime.now () + datetime.timedelta(days=validity_days)
return key, expiry_date.strftime('%Y-%m-%d')

# Функция для проверки ключа
def check_key(input_key, secret, expiry_date):
# Получаем текущую дату
current_date = datetime.datetime.now ().strftime('%Y-%m-%d')
# Проверяем, не истек ли ключ
if current_date > expiry_date:
return False
# Генерируем ключ на основании секрета и текущей даты
valid_key, _ = generate_temp_key(secret, 0) # Установим 0 дней, чтобы получить только ключ на текущую дату
# Сравниваем с введенным ключом
return input_key == valid_key

# Пример использования
secret = "my_secret_key"
validity_days = 7

# Генерируем временный ключ
key, expiry_date = generate_temp_key(secret, validity_days)
print(f"Generated Key: {key}, Expiry Date: {expiry_date}")

# Запрашиваем у пользователя ключ
user_input = input("Введите одноразовый ключ для использования программы: ")

# Проверяем введенный ключ
if check_key(user_input, secret, expiry_date):
print("Ключ действителен. Доступ к программе предоставлен.")
else:
print("Ключ недействителен или истек.")
Вертолётов 625 Мудрец (13288) 1 неделю назад
Код:
 import uuid 
from datetime import datetime, timedelta

class KeyManager:
def __init__(self):
# Словарь для хранения ключей и их времен жизни
self.keys = {}

def generate_key(self, expiration_minutes=10):
"""
Генерирует новый уникальный временной ключ.

:param expiration_minutes: Время действия ключа в минутах
:return: Сгенерированный ключ
"""
key = str(uuid.uuid4())
expiration_time = datetime.now() + timedelta(minutes=expiration_minutes)
self.keys[key] = expiration_time
return key

def validate_key(self, key):
"""
Проверяет валидность ключа.

:param key: Ключ для проверки
:return: True, если ключ действителен; иначе False
"""
if key in self.keys:
expiration_time = self.keys[key]
if datetime.now() <= expiration_time:
# Удаляем ключ после успешной валидации (одноразовый)
del self.keys[key]
return True
else:
# Удаляем просроченный ключ
del self.keys[key]
return False

# Пример использования системы ключей
if __name__ == "__main__":
manager = KeyManager()

# Генерация нового временного ключа, действующего 5 минут
key = manager.generate_key(expiration_minutes=5)
print(f"Сгенерированный ключ: {key}")

# Валидация ключа
user_input = input("Введите ключ для использования программы: ")
if manager.validate_key(user_input):
print("Ключ введён правильно. Доступ предоставлен.")
else:
print("Неверный или просроченный ключ.")
Похожие вопросы