Форум Pawn.Wiki - Воплоти мечту в реальность!: J-Code - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ INC ][ All ]
J-Code Защита строковых данных с помощью символьного сдвига
Оценка: -----

#1
Пользователь офлайн   Kuso 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
J-Code - Защита данных с помощью символьного сдвига :smile:
Описание :

  • Гибкость - Поддержка динамического сдвига (определяется цифрой в конце строки) или статичного значения (DEFAULT_SECURITY_SHIFT).
  • Простота: Минималистичный код, легко интегрируется в любые проекты.


Установка:

  • Поместить данный инклуд по пути :
    pawno/include

  • Подключить в моде :
    #include <J-Code>


Пример использования:

Статичный сдвиг (по умолчанию — 5):

new
    original[MAX_SIZE_HASH_PASSWORD] = "Test", // Исходная строка
    encoded[MAX_SIZE_HASH_PASSWORD], // Зашифрованные данные
    decoded[MAX_SIZE_HASH_PASSWORD]; // Расшифрованные данные

    EncodeString(encoded, original); // Кодируем данные из original и записываем их в encoded

    DecodeString(decoded, encoded); // Декодируем данные из encoded и записываем в decoded

    printf("Original: %s | Encoded: %s | Decoded: %s", original, encoded, decoded);
    // Результат: Original: Test | Encoded: Yjxy | Decoded: Test


Динамический сдвиг (указывается цифрой в конце строки):

new
    original[MAX_SIZE_HASH_PASSWORD] = "Test3", // Исходная строка
    encoded[MAX_SIZE_HASH_PASSWORD], // Зашифрованные данные
    decoded[MAX_SIZE_HASH_PASSWORD]; // Расшифрованные данные

    EncodeString(encoded, original); // Кодируем данные из original и записываем их в encoded

    DecodeString(decoded, encoded); // Декодируем данные из encoded и записываем в decoded

    printf("Original: %s | Encoded: %s | Decoded: %s", original, encoded, decoded);
    // Результат: Original: Test3 | Encoded: Whvw3 | Decoded: Test3


Скачать :


Автором являюсь Я, при пересливе указывайте автора : jrius

Сообщение отредактировал Kuso: 25 марта 2025 - 10:34

3

#2
Пользователь онлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
1. Вместо const DEFAULT_SECURITY_SHIFT, сделай так:

#if !defined DEFAULT_SECURITY_SHIFT
    #define DEFAULT_SECURITY_SHIFT (5)
#endif

Чтобы я мог сделать так:

#define DEFAULT_SECURITY_SHIFT (7)
#include <J-Code>

2. То же самое сделай с MAX_SIZE_HASH_PASSWORD, чтобы я мог изменить число не влезая в инклуд.

Также само название не совсем понятно. Если это MAX, то 128, а если SIZE, то должно быть MAX+1. Так при создании переменной я буду использовать SIZE, а в проверках уже MAX. Сейчас вводимый текст в диалог, где можно ввести 128 символов, не поместится и твоя функция ничего не сделает.. Сделай MAX_HASH_PASSWORD равной MAX_CHATBUBBLE_LENGTH, чтобы определить максимально возможный текст от игрока

#if !defined MAX_HASH_PASSWORD
    #define MAX_HASH_PASSWORD (MAX_CHATBUBBLE_LENGTH)
#endif

#if defined SIZE_HASH_PASSWORD
    #undef MAX_HASH_PASSWORD
#endif
#define SIZE_HASH_PASSWORD (MAX_HASH_PASSWORD+1)

3. При DEFAULT_SECURITY_SHIFT = 2_147_483_648 - скрипт перестаёт работать. Нужно сделать доп проверки на валидность числа

4. Может лучше обрезать строку длиннее MAX_HASH_PASSWORD, чем просто возвращать 0?

5. Попахивает GPT

for ; i < len && i < max_len - 1; i++ do {
    ...
}

6. Поставь static для функции GetShift, чтобы её нельзя было вызывать из другого файла

Сообщение отредактировал M I S T E V: 26 марта 2025 - 14:57

1

#3
Пользователь офлайн   execution88 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (25 марта 2025 - 21:18) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Тогда почему бы не валидировать остальные макросы, судя по твоей логики?)
На самом деле это проблема того, кто ставит такие значения.
Поэтому тебе и дают возможность переопределять.
0

#4
Пользователь онлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияexecution88 (26 марта 2025 - 11:48) писал:

Тогда почему бы не валидировать остальные макросы, судя по твоей логики?)
На самом деле это проблема того, кто ставит такие значения.
Поэтому тебе и дают возможность переопределять.

Думаю не проблема добавить это в начало инклуда)


#if defined DEFAULT_SECURITY_SHIFT
    #if DEFAULT_SECURITY_SHIFT < 0
        #undef DEFAULT_SECURITY_SHIFT
    #endif
#endif

0

#5
Пользователь офлайн   execution88 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (26 марта 2025 - 13:12) писал:

Думаю не проблема добавить это в начало инклуда)


#if defined DEFAULT_SECURITY_SHIFT
    #if DEFAULT_SECURITY_SHIFT < 0
        #undef DEFAULT_SECURITY_SHIFT
    #endif
#endif

Зачем? Если ты ставишь такие значение, значит ты понимаешь, что делаешь. От этого нет смысла
0

#6
Пользователь онлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияexecution88 (26 марта 2025 - 14:40) писал:

Зачем? Если ты ставишь такие значение, значит ты понимаешь, что делаешь. От этого нет смысла

Не подумай, я не пытаюсь спорить. Суть такова, что мне вообще эта система не нужна, но любому другому новичку нужна будет. Он может подумать, что чем больше число, тем лучше. Поставит вместо 5 число 999 999 999 999 и скрипт перестанет работать. Первая мысль какая? Не то число установлено или скрипт не рабочий?

Это называется "защита от дураков". Если она не нужна, тогда вообще нужно убрать эту константу, а просто поставить число в функцию :blush:



Добавил 6й пункт в первое сообщение

Сообщение отредактировал M I S T E V: 26 марта 2025 - 14:52

0

#7
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Автор, твоя система - это не хэширование, а шифрование. Не вводи людей в заблуждение названием константы.

Ну и целесообразность подобного подхода к защите данных околонулевая, ибо подобрать сдвиг будет не особо сложно для современного железа. Если уж по какой-то причине кто-то не желает использовать хэширование в виде той же SHA256 (которая нативно вшита в SAMP в виде SHA256_PassHash) или вообще bcrypt, который, при желании, можно сделать крайне медленным для подбора (что не особо нужно в случае SAMP, но всё же) - лучше уж посмотреть в сторону каких-то более продвинутых типов шифрования, по типу того же AES.

Просмотр сообщенияM I S T E V (25 марта 2025 - 21:18) писал:

1. Вместо const DEFAULT_SECURITY_SHIFT, сделай так:

#if !defined DEFAULT_SECURITY_SHIFT
    #define DEFAULT_SECURITY_SHIFT (5)
#endif


Можно и вот так сделать)
#if !defined DEFAULT_SECURITY_SHIFT
    const DEFAULT_SECURITY_SHIFT = 5;
#endif


Ну и помещать в скобки значение макросов имеет смысл, в основном, только тогда, когда у тебя макрос принимает параметры (при этом, чаще всего, именно когда в макросе какие-либо арифметические действия скрываются).
А в случае макроса без параметров скобки, разве что, запрещают прямую вставку значения макроса в текст делать, а-ля:
#define SOME_MACROS 5
printf("В макросе число "#SOME_MACROS);

В остальном, не припомню каких-либо проблем, от которых скобки реально спасали бы (но может кто-то напомнит?).

Ну и на всякий случай уточню, что чтоб лезть во внутренности инклуда, нужно хотя бы базис по шифру Цезаря изучить, дабы, например, не делать подобного:

Просмотр сообщенияM I S T E V (25 марта 2025 - 21:18) писал:

3. При DEFAULT_SECURITY_SHIFT = 2_147_483_648 - скрипт перестаёт работать. Нужно сделать доп проверки на валидность числа

Ибо, в целом, указывать значения больше 255 (в случае с cp1251 и SAMP) для сдвига смысла не имеет.

Ну и главная защита от дурака тут может быть только в объяснении того, что всерьёз подобную "защиту" использовать не стоит, если данные, которые вы шифруете, вам важны.

Сообщение отредактировал DeimoS: 28 марта 2025 - 09:20

1

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика