Top.Mail.Ru
Ответы

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

Возможно ли создать систему генерации ключей для использования программы ,написанной на python?
Что-то типо:введите одноразовый ключ для использования программы.

По дате
По рейтингу
Аватар пользователя
Новичок
7мес

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("Ключ недействителен или истек.")

Аватар пользователя
Мудрец
7мес

Код:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
 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("Неверный или просроченный ключ.")