СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

H Генератор ключей своими клешнями в черновиках Из песочницы Tutorial

Всем привет, и сегодня будет гайд как сделать генератор ключей Steam на питоне. Для этого нам понадобится:

Компоненты
Прямые руки и PyCharm 2016.2(какой угодно). Также easygui для Вашей версии Python.

Знания
Установка easygui. Умение писать в комментарии.

Подача
Вам нужно поместить easygui и random в одну и ту же папку с Вашим keygen'ом. Как это сделать?

1.Удаляете файл __init__ в easygui(Python/Lib/site-packages/easygui)
2.Копируете файл easygui и вставляете в папку с keygen'ом.
3.Переменовываете в папке Python'а easygui на __init__
4. С рандомом всё просто. Он лежит в Python/Lib/random. Просто Copy-Paste!

Самым критичным к другим людям
Да есть детские комментарии. Но ошибок нету. Программа работает. Если вы хотите критиковать в комментарии, то критикуйте не просто так, а с исправлением ошибок.

Для начала импорты и переменные.

from random import *
from easygui import *
keys = 0 #кол-во генерируемых ключей
b = "Ваш ключик: " #Чтобы писало не GFJSK-JFKDF..., а Ваш ключик: (ключ)

С этим покончили. Если у Вас нет аудитории, то можете пропустить. Авторизация:

def login_procedure():
    while True: #Цикл для тех кто ошибётся в вводе!
        msg = "Авторизуйтесь" 
        title = "Вход"
        fieldNames = ["Логин", "Пароль"]
        #Мы сделали переменные  и список для полей ввода!
        fieldValues = multpasswordbox(msg, title, fieldNames) #Сами поля
        try: #Может у кого easygui нету или "Отмена" нажмёт?
            USERNAME, PASSWORD = fieldValues[0], fieldValues[1] #Переменные логина и пароля
        except:
            msgbox("Переустановите easygui!", "Ошибка №1")
            exit(0)
        #Проверка
        if USERNAME == "Login" and PASSWORD == "Password":
            msgbox("Вход выполнен!") #Прям как на VB!
            break #Выходим из цикла
        else:
            msgbox("Неверный логин или пароль")

Теперь надо сделать так чтобы было кастомизируемое количество ключей. (Внимание школо-критикам! Да, программа вылетит, если вы введёте больше 10. Да я неправ).

def key_number():
    global keys
    msg = "Введите число от 1 до 9!"
    title = "Почти готово!"
    fieldName = "Кол-во ключей"

    fieldValues2 = enterbox(msg, title, fieldName)

    keys = fieldValues2[0]

Ну вот. Теперь осталось самое сложное. Сделать вывод этого всего на экран. Вы зададитесь вопросом «И как вообще рандомные буквы делать?» Первый этап.

def key_giver():
    global b
    alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
                'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] #Список букв и цифр

Теперь добавим в функцию key_giver() цикл создания ключей и вывод на msgbox.

    for i in range(int(keys)):
        for i in range(3): #Три чёрточки(4 - 1 = 3)
            for i in range(5):
                a = randint(0, 35)
                b = str(b) + str(alphabet[a])
            b = str(b) + str("-")
        for i in range(5): #Ещё раз, чтобы было не 1-2-3-4-, a 1-2-3-4
            a = randint(0, 35)
            b = str(b) + str(alphabet[a])
        msgbox(b, "Вот ваш ключ")
        b = "Ваш ключик: " #Чтобы обнулить ключи, иначе всё бы складывалось в одну кучу.

Удивительно. Теперь у нас есть все необходимые функции. Надо бы их вызвать.

login_procedure()
key_number()
key_giver()

Также вы можете сделать бесконечный ввод ключей(если не нравится, что больше 10 нельзя вводить):
login_procedure()
while True:
    key_number()
    key_giver()

Теперь у Вас всё будет работать ровно и чётко. Конвертируйте в .exe и отправьте гулять по просторам интернета. Код всего 69 строчек. Не займёт много памяти.

комментарии (19)

+3
IonianWind ,  

1 апреля вроде прошло уже?

0
klylex ,  
У некоторых эта дата круглый год. =)
–2
thematdev ,  
Как бы в плагине easygui файл __init__ вообще нужен только для того, чтобы написать pass.
#Код __init__ в easygui!
from easygui import *
pass
__all__ = easygui.__all__

Можно было и спросить.
+4
riot26 ,  
Жесть
–2
thematdev ,  
Ты о чём?
0
lorc ,  
Ну хотя бы о string.join(), string.ascii_uppercase, string.digits, random.sample(). Зачем ты всё время изобретаешь велосипед?
0
wtf_object ,  
Функция login_procedure()
Список букв и цифр

Никогда не понимал для чего нужны такие комментарии?

+3
pewpew ,  
А зачем?
0
Tsyganov_Ivan ,  
За такие статьи нынче инвайты выдают?
Хотел было описать что не так в приведенных примерах кода, но руки опускаются… да все не так
использование одной и той же переменной во вложенных циклах
постоянное приведение строки к строке — str(b) + str(alphabet[a])
Вот это просто чудесно — str("-")
0
Tanner ,  
А кому и в чём может быть полезна эта программа?
0
MasMaX ,  
Лабораторная работа?
0
maximw ,  
А при чем тут Steam?
0
ShashkovS ,   * (был изменён)
Join — великая вещь.
Но вообще код с душком, да.

from string import ascii_uppercase, digits
from random import choices
def key_gen():
    alphabet = ascii_uppercase + digits
    return '-'.join(''.join(choices(alphabet, k=5)) for __ in range(4))

print([key_gen() for __ in range(5)])
# 
# ['AOFZA-ZGTTQ-WHEJ5-CJDAI',
#  'QH71D-E14P3-8D1WN-8FT2U',
#  'AQRX5-LGXR2-XUSUC-5K6UZ',
#  'TO1TS-KNPVB-ZN4G8-FAYK0',
#  '9N9VZ-G8AC1-N5VMN-5OBM7']
0
ShashkovS ,  
PS, для python <3.6:
from string import ascii_uppercase, digits
from random import choice
def key_gen():
    alphabet = ascii_uppercase + digits
    return '-'.join(''.join(choice(alphabet) for __ in range(5)) for __ in range(4))
0
thematdev ,  
Как бы это в косноль, а у меня в msgbox
0
ShashkovS ,   * (был изменён)
Обычно это делают так:
msgbox(b, "Вот ваш ключ: " + key_gen())

(не вникал в easygui.msgbox, может быть так: msgbox(key_gen(), «Вот ваш ключ»))
В результате функцию key_gen() можно тестировать отдельно от гуя, и да и вообще логика с ключом в одном месте, логика с гуём — в другом.
+1
mr_dein0s ,  

Возвращение скрипт-кидди? Неудачная лабораторная по информатике? Что это было вообще?
Мало того, теперь статья заренеймлена и контент полностью изменен. Это вообще нынче законно?


Версия из кеша гугла

image

0
delvin-fil ,  
Первый способ — AdBlock, априори он и есть единственный.

Да ну? С чего это «единственный»? uBlock origin пробовали?
зы: не реклама
0
thematdev ,  
Ну, просто я говорю не только, но как бы он всё блокирует, и можно элемент убрать любой