Исходник Python | Простой модуль создания и проверки сигнатуры запроса

t.me/maj0rblog
Дизайнер
Статус
Оффлайн
Регистрация
6 Окт 2018
Сообщения
975
Реакции[?]
619
Поинты[?]
12K
Простой модуль для создания и проверки сигнатуры запроса при общения между клиентом и сервером.
Это поможет избежать мануальных запросов от пользователя пока они не найдут принцип создания сигнатуры и ваше уникальное значение.

GITHUB :
Пожалуйста, авторизуйтесь для просмотра ссылки.


Работает по такому принципу:
  1. Строка с началом "<uniqueValue*>"
  2. К этой строке мы из введённых в функцию аргументов добавляем их значения.
    И к примеру получаем уже такую строку "<uniqueValue*>user:maj0r pass:123 type:create-module"
  3. Уже в конец снова добавляем <uniqueValue*> и получаем уже такую строку "<uniqueValue*>user:maj0r pass:123 type:create-module<uniqueValue*>"
  4. Теперь всё это переводим в md5 хеш и переводим в хекс значение.
Пример использования:
Python:
from sign import Signature

clRequestPart1="user:maj0r"
clRequestPart2="pass:123"
clRequestPart3="type:create-module"
clRequestSign="328b3e746dd4100274e48002a02818ac"

def main():
    if Signature.validate(clRequestPart1, clRequestPart2, clRequestPart3, clientSignature=clRequestSign):
        print("Correct request")
    else:
        print("Bad signature")

if __name__ == "__main__":
    main()
Код модуля:
Python:
#----------------------------------------------------------------------------------------
#
# MIT License
#
# Copyright (c) 2023 maj0r, maj0rdesign
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
#----------------------------------------------------------------------------------------

#
#
# Request signature creation/validation module
# Usage:
#   -- Change unSection to your unique value
#
#   print(Signature.create("user:maj0r", "pass:123", "type:create-module"))
#   print(Signature.validate("user:maj0r", "pass:123", "type:create-module", clientSignature="328b3e746dd4100274e48002a02818ac"))
#
#

import hashlib

global unSection
unSection = "<unique section>"

class Signature:
    def create_raw(rawString: str):
        return hashlib.md5(f"{unSection}{rawString}{unSection}".encode()).hexdigest()

    def create(*args: str):
        doneStr = f"{unSection}"
        for i in range(len(args)):
            if i != len(args):
                doneStr += args[i]
        doneStr += unSection

        return hashlib.md5(f"{unSection}{doneStr}{unSection}".encode()).hexdigest()

    def validate(*args: str, clientSignature: str):
        doneStr = f"{unSection}"
        for i in range(len(args)):
            if i != len(args):
                doneStr += args[i]
        doneStr += unSection

        return clientSignature == Signature.create_raw(doneStr)
 

Вложения

Последнее редактирование:
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Перестраховка, в классе его может не увидеть
это так не работает, ты говоришь питону, находясь в самой большой области видимости: возьми unSection из глобальной области видимости. Это никак не отразится на то, что у тебя внутри класса
 
t.me/maj0rblog
Дизайнер
Статус
Оффлайн
Регистрация
6 Окт 2018
Сообщения
975
Реакции[?]
619
Поинты[?]
12K
это так не работает, ты говоришь питону, находясь в самой большой области видимости: возьми unSection из глобальной области видимости. Это никак не отразится на то, что у тебя внутри класса
У меня были такие моменты когда код без глобала в подобных ситуациях не работал.
Я не особо ещё разобрался с этим опрделением, спасибо за пояснение
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
26 Июн 2020
Сообщения
1,114
Реакции[?]
210
Поинты[?]
8K
У меня были такие моменты когда код без глобала в подобных ситуациях не работал.
Это могло быть из-за небезопасной модификации переменной. Следует отметить, что при изменении глобальной переменной в функции python сам предупреждает, что так делать не нужно, даже учитывая мьютекс в лице GIL.
 
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Это могло быть из-за небезопасной модификации переменной
чё ты высрал
Следует отметить, что при изменении глобальной переменной в функции python сам предупреждает
ничего он не предупреждает...
 
Участник
Статус
Оффлайн
Регистрация
26 Июн 2020
Сообщения
1,114
Реакции[?]
210
Поинты[?]
8K
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Посмотреть вложение 241934

Согласен, неправильно выразился. предупреждает -> рэйсает
Посмотреть вложение 241935
> Следует отметить, что при изменении глобальной переменной в функции python сам предупреждает, что так делать не нужно, даже учитывая мьютекс в лице GIL.
Ты изменяешь не глобальную переменную, а локальую. Локальной нет, но ты делаешь инкремент. Получаешь очевидный эксепшн.

> Это могло быть из-за небезопасной модификации переменной
Тоже самое. Это нельзя назвать изменением глобальной переменной, если ты в принципе не указываешь в своей функции, что ты берёшь переменную из глобальной области видимости.

Не нужно просто писать "умные" вещи, не зная их значения. И да, ChatGPT, серьёзно? :bayan:
 
Сверху Снизу