Evgenii Legotckoi
Evgenii LegotckoiШілде 23, 2017, 9:27 Т.Ж.

Qt/C++ - 069-сабақ. XOR шифрлауы

XOR шифрлауы бастапқы мәтінге биттік эксклюзивті НЕМЕСЕ арқылы кілтті қолдану болып табылады. Биттік эксклюзивті механизм келесідей:

X ЖӘНЕ X⊕Y
0 0 0
0 1 1
1 0 1
1 1 0

Осылайша, эксклюзивті НЕМЕСЕ орындаған кезде, егер айнымалылар бірдей мәндерге ие болса, әрқашан нөлдік мән болады.

XOR ерекшелігі сол функция деректерді шифрлаумен қатар оның шифрын шеше алады. Бұл жеткілікті үлкен шифрлық мәтінді немесе үлкен құпия сөз сөздігін ескере отырып, өте тез бұзылуға болатын қарапайым деректерді шифрлау әдісі. Дегенмен, оны шағын бастапқы деректерді қорғау үшін пайдалануға болады.

Qt контекстінде XOR пайдалану бағдарлама Qt қолданбай жазылғаннан айырмашылығы жоқ. Мұнда сұрақ басқаша, QString нысандарынан шифрлау үшін деректерді қалай дұрыс шығару керек, мысалы, егер мәтін QTextEdit ішіне енгізілген болса.

Ол үшін біз мыналарды қамтитын программаны жазамыз:

  • QTextEdit, ол шифрланатын мәтінді енгізеді.
  • QLineEdit, оған шифрлау кілті енгізіледі.
  • QPushButton, деректерді шифрлау/шифрды шешу орындалатын басу өңдегіш ұяшығында. Тағы да айтамын, әдіс бірдей қолданылады.

Бағдарлама келесідей болады:


Жоба құрылымы

Жоба CMake көмегімен жазылған, сондықтан құрылым келесідей болады:

  • CMakeLists.txt
  • main.cpp
  • EncoderWidget.h
  • EncoderWidget.cpp

Шифрлау/шифрды шешу функциясы

Шифрлауды/шифрды шешуді жүзеге асыру үшін сізге қажет:

  • Бастапқы деректері бар таңбалар массивінің болуы
  • Бастапқы деректермен массивтің ұзындығы
  • Кілт таңбалар массиві ретінде
  • Кілт ұзындығы
  • Сондай-ақ шығыс деректері бар массив.
const char* input;
int inputLength;
const char* key;
int keyLength;

char output[inputLength];

for (int i = 0; i < inputLength + 1; ++i)
{
    output[i] = input[i] ^ key[i % keyLength + 1];
}

Шифрлауды орындауға арналған ұяшық өңдегіші

Жоғарыда айтылғандай, мәтінді шифрлау үшін енгізу өрістерінен деректерді дұрыс шығарып алу қажет. Ол үшін QString жолы түріндегі мәтінді QByteArray ішіне көшіру керек, одан const char* түріндегі деректерді шығарып алу керек. Сондай-ақ ұзындығын алу керек. осы деректерден.

Бұл жерде бір нүкте бар. QString-тен QByteArray-ге деректер toLatin1() әдісі арқылы түрлендіріледі , ол деректерді ASCII кестесіне түрлендіреді, бұл мәтін кириллицада жазылған болса, деректердің бүлінуіне әкеледі. Яғни, шифрлаудың бұл тәсілі, мысалы, логин мен пароль үшін тек ASCII кестесіндегі таңбалар пайдаланылса, өзекті болады.

void EncoderWidget::encodeDecode()
{

    const char* input = m_textEdit->toPlainText().toLatin1().data();
    int inputLength = m_textEdit->toPlainText().toLatin1().length();
    const char* key = m_keyLineEdit->text().toLatin1().data();
    int keyLength = m_keyLineEdit->text().toLatin1().length();

    char output[inputLength];

    for (int i = 0; i < inputLength + 1; ++i)
    {
        output[i] = input[i] ^ key[i % keyLength + 1];
    }

    m_textEdit->setText(QString::fromLatin1(output, inputLength));
}

Барлығы

Жобаны келесі сілтемеден жүктеп алуға болады.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Юрий
  • Там. 17, 2017, 8:28 Т.Ж.

Шифрует/дешифрует текст от 8 символов, так и должно быть?

Evgenii Legotckoi
  • Там. 17, 2017, 8:33 Т.Ж.

Не обратил внимания на это, Проверял с большим текстом.. По идее не должно.

RC
  • Мамыр 5, 2020, 10:46 Т.Қ.

Хоть пост и старый, но хочется понять. В случае xor шифрования символов мы может получить специальнвй символ(к примеру \0 или \n)? И, если, к примеру, нам нужно записать в текстовый файл эти данные, то мы при следующем считывании можем получить проблемы с считыванием?

Evgenii Legotckoi
  • Мамыр 6, 2020, 2:49 Т.Ж.

в контексте этой статьи с символом \n, то есть символом новой строки проблем быть не должно, поскольку он точно присутствует в таблице символов ASCII, касательно \0 смотрите в таблице символов ASCII, если есть соответствующий символ.
А так, по идее можно доработать и для юникода и для любой другой кодировки, тогда проблем быть не должно.

b
  • Жел. 11, 2021, 1:19 Т.Ж.

Здравствуйте, не очень понимаю, почему в строках

for (int i = 0; i < inputLength + 1; ++i)
{
    output[i] = input[i] ^ key[i % keyLength + 1];
}

добавляется единица к inputLength и keyLength?

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10
Соңғы пікірлер
i
innorwallҚар. 13, 2024, 11:03 Т.Қ.
Qt тілінде ойын қалай жазылады - 3-сабақ. Басқа объектілермен әрекеттесу what is priligy tablets What happens during the LASIK surgery process
i
innorwallҚар. 13, 2024, 8:09 Т.Қ.
C++ файлдарының ішінде CMakeLists.txt ішінде жарияланған айнымалы мәндерді пайдалану where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
i
innorwallҚар. 11, 2024, 10:12 Т.Қ.
Django - Оқулық 055. Автоматты толтыру өрісі функциясын қалай жазу керек Freckles because of several brand names retin a, atralin buy generic priligy
i
innorwallҚар. 11, 2024, 6:23 Т.Қ.
QML - Сабақ 035. C++ қолданбай QML тілінде сандарды пайдалану priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
i
innorwallҚар. 11, 2024, 3:50 Т.Қ.
Qt/C++ - 052-сабақ. Qt аудио ойнатқышын AIMP стилінде теңшеу It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
Енді форумда талқылаңыз
i
innorwallҚар. 14, 2024, 12:39 Т.Ж.
добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
i
innorwallҚар. 11, 2024, 10:55 Т.Ж.
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз