0 / 0 / 0
Регистрация: 08.06.2021
Сообщений: 3

Шифр ГОСТ 28147-89. Не получается расшифровать данные

17.07.2022, 19:44. Показов 1119. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня уважаемые!
Есть задание реализовать шифр по ГОСТ 28147-89, дано описание и несколько строк псевдокода. Вот я тут набросал код который шифрует и дешифрует строку, но он не работает. Не удается расшифровать данные. Может кто сталкивался с таким шифром, посмотрите пож в чем может быть дело? Любая помощь будет очень ценна.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip>
#include <cmath>
using namespace std;
 
void Shifr(unsigned int& L, unsigned int& R, unsigned int S[][16], unsigned int W[]) {
    for (unsigned int v = 0; v < 32; v++) {
 
        unsigned int k = R + W[v], KeyEncrypt = 0;
        for (unsigned int j = 0; j < 8; j++) {
            KeyEncrypt |= S[j][k & 0b1111];
            KeyEncrypt <<= 4;
            k >>= 4;
        }
        KeyEncrypt = (KeyEncrypt << 11) | (KeyEncrypt >> (32 - 11));
        L ^= KeyEncrypt;
        swap(L, R);
    }
}
 
unsigned int main() {
 
    // -------------------------------------------  1 слово = 4 Байт = 32 Бит
    unsigned int K[8]{};                                // 8  слов = 32 Байт = 256 Бит
    unsigned int W[32]{};                           // 32 слова = 128 Байт = 1024 Бит
 
    char key[] = "_*Oz7&@#98+9$+_63893&-$)yerdg";
    char msg[] = "2022, hello world and by world ;)";
    char EncryptMsg[size(msg)]{};
    char DecryptMsg[size(msg)]{};
    unsigned int TempKey[8]{};
 
    srand(77);
    unsigned int S[8][16]{};
    for (unsigned int i = 0; i < 8; i++) {
        for (unsigned int j = 0; j < 16; j++) {
            S[i][j] = rand() % 16;
        }
    }
    unsigned int CountByte = strlen(key) < 32 ? strlen(key) : 32;
    memcpy(K, key, CountByte);                              // копируем числовые коды первых 32 символов в ключ
 
    memcpy(TempKey, K, 32);
    for (unsigned int i = 0; i < 32; i += 8) {
        if (i == 24) 
            reverse(begin(TempKey), end(TempKey));
        memcpy(W + i, TempKey, 32);
    }
 
    for (unsigned int i = 0; i < strlen(msg); i += 8) {
        unsigned int X[2]{};                                    // блок 8 символов
        CountByte = strlen(msg + i) < 8 ? strlen(msg + i) : 8;
        memcpy(X, msg+i, CountByte);
 
        unsigned int L = X[0], R = X[1];
 
//----------------------------------------------------------------
        Shifr(L, R, S, W);
//----------------------------------------------------------------
        unsigned int Y[2]{};
        memcpy(Y, &L, 4);
        memcpy(Y + 1, &R, 4);
        memcpy(EncryptMsg + i, Y, CountByte);
 
        //cout << i << ", " << EncryptMsg << strlen(EncryptMsg) << endl;
    }
    cout << EncryptMsg << endl;
    
//----------------------------------------------------------------
//------------------------------------------------------ Decripted
    reverse(begin(TempKey), end(TempKey));
    for (unsigned int i = 0; i < 32; i += 8) {
        if (i == 8) 
            reverse(begin(TempKey), end(TempKey));
        memcpy(W + i, TempKey, 32);
    }
 
    for (unsigned int i = 0; i < strlen(EncryptMsg); i += 8) {
        unsigned int X[2]{};
        unsigned int CountByte = strlen(EncryptMsg + i) < 8 ? strlen(EncryptMsg + i) : 8;
        memcpy(X, EncryptMsg + i, CountByte);
 
        unsigned int L = X[0], R = X[1];
//--------------------------------------------------
        Shifr(L, R, S, W);
//--------------------------------------------------
        unsigned int Y[2]{};
        memcpy(Y, &L, 4);
        memcpy(Y + 1, &R, 4);
        memcpy(DecryptMsg + i, Y, CountByte);
    }
    cout << DecryptMsg << endl;
    
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2022, 19:44
Ответы с готовыми решениями:

Шифр ГОСТ 28147-89?
У меня есть два режима работы шифра простая замена и гаммирование. Я не понял как сделать гаммирование с обратной связью и режим выработки...

Шифр замены по ГОСТ 28147-89
Исходный текст пишется в строки, количество символов в строке задается пользователем ,шифрограмма разбивается на группы с заданным...

Шифр замены по ГОСТ 28147-89
Размер таблицы 8х4, ключ задается пользователем, шифрограмма разбивается на группы с заданным количеством символов. Помогите пожалуйста...

1
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
18.07.2022, 00:01
Алгоритм криптографического преобразования данных ГОСТ 28147-89: https://emkelektron.webnode.pa... -28147-89/.
Ещё раз о шифровании ГОСТ 28147-89: https://habr.com/ru/post/256843/.
По второму адресу есть ссылка на сишную реализацию алгоритма: https://github.com/sftp/gost28147.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2022, 00:01
Помогаю со студенческими работами здесь

Как расшифровать сообщение по алгоритму ГОСТ 28147-89?
Друзья! Я написал программу, которая реализует шифрование. Сверился с этим документом. Теперь нужно реализовать расшифровку, и прежде,...

Почему не правильно работает шифр ГОСТ 28147-89 в режиме простой замены
Написал программку шифрующее текстовое сообщение шифр ГОСТ только без сдвига 11 битов в функции Фейстеля.Вроде как шифрует но делаю...

Не работает шифрование по ГОСТ 28147-89, ГОСТ Р 34.10-2001,ГОСТ Р 34.11-94 (ASP.NET)
Создавал веб-приложение(ASP.Net) для шифрования по данным гостам, нашёл по данной теме код, но он не рабочий(VS ошибок не выдаёт, но при...

ГОСТ 28147
В этом госте описывается основной шаг криптопреобразования: S = (N1 + X) mod (2^32)!!! Вопрос в чём, 2^32 = 4.294.967.296 .... но вот с...

ГОСТ 28147-89 на C++
Здравствуйте уважаемые, Решил попрактиковаться и написать алгоритм шифрования и дешифрования текстовых файлов по ГОСТ 28147-89 в режиме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru