Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - C/С++ | Крипто алгоритм ГОСТ (28147-89).

Ответить
Настройки темы
C/C++ - C/С++ | Крипто алгоритм ГОСТ (28147-89).

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


На сайте www.vipul.net/gost/ есть файл для языка С. Он не компилируется в MS Visual C (6 net 2003/2005) но нормально работает в CodeBlocks.
Вопрос в следующем, как на его основе создать консольную шифровалку по такому принципу - gost.exe ischod.txt pass shufrovanya.txt ?
В моем понимании я считываю файл в переменную шифрую и сохраняю в новый файл.
Подскажите кто знает.

Отправлено: 18:20, 05-09-2006

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Во-первых, прфеикс *Практика* был выбран неверно. (Согласно рекомендация hasherfrog).
Во-вторых, с какими ошибками оно не компилируется в VC6?
В-третьих, ГОСТ определяет, как минимум 3 варианта шифрования (вернее, 2 метода шифрования и один хэширования). Какой из них вас интересует? Все три метода в исходнике есть, даже с краткими пояснениями, что делается.

Цитата:
В моем понимании я считываю файл в переменную шифрую и сохраняю в новый файл.
Правильное понимание. Есть какие-то проблемы с реализацией? Главное, что нужно знать, гост - шифр блочный. С 64 битными блоками. Соответственно, требуется хранить длину оригинального файла файла и добить при шифровании его случайными символами до длины кратной 64 битам.

Ну и последнее, ключ должен быть 256-битным. Что требует ОЧЕНЬ длинного пароля, если его использовать в качестве ключа. Порядка 40 цифро-буквенных символов. Можно, конечно, применять его хэш. Но наверное, это снизит общую криптостойкость.

-------
http://ivank.ru


Отправлено: 18:55, 05-09-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Спасибо за отзыв ivank.
Цитата:
*Практика* был выбран неверно. (Согласно рекомендация hasherfrog).
Признаюсь честно, не читал. Возникла необходимость организовать самопальный шифратор. Первое, что я сделал, так это в форуме на поиске проверил, не обговаривалась ли подобная тема, далее зашёл в соответствующий раздел, увидел тему с «тегом» *Практика* и решил задать название в этом стиле, так как гост это теория, а сборка программы это практическая реализация, на моё убеждение.
Я обязательно ознакомлюсь с рекомендациями hasherfrog.

Цитата:
с какими ошибками оно не компилируется в VC6?
Вернее сказать - при сборке (при компиляции ошибка не выскакивает, а только при полной сборке).
Вот
Код: Выделить весь код
--------------------Configuration: Crypto_gost - Win32 Debug--------------------
Compiling...
Main.cpp
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Crypto_gost.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Crypto_gost.exe - 2 error(s), 0 warning(s)
По опыту могу сказать: надо подключить какую-то внешнюю библиотеку. Только вот какую?
Ещё вопрос по VC6: известно, что библиотеки внешние подключаются через среду разработки Project>Settings> вкладка Link> поле Object/library modules
но есть ещё способ (наверно и не один) подключения через исходник, оператором pragma или другим. Как?
На этом фоне CodeBlocks справляется замечательно, он просто создаёт ехе.
Но что этот файл делает? Говорит мне что
Цитата:
All tests passed
? Или демонстрирует работу алгоритма?

Цитата:
ГОСТ определяет, как минимум 3 варианта шифрования
В общем, где в файле нужно передавать файл на зашифровку, где на исходный, а где задавать файл пароль (или сам пароль)?
Вот как мне это видится
Код: Выделить весь код
const char *F1="Source.txt",*F2="Dest.enc";
FILE *fFile;
fFile = fopen(F1,"r")
fscanf(fFile," %i ",sourse);

gost (sourse,dest,pass); //функция, которая должна вызывать что-то из предложенного файла

fclose(fFile);
fFile = fopen(F2,"w");
fprintf(fFile," %i ",dest); //или как вариант fprintf(fFile," %i ",gost(sourse,pass))
fclose(fFile);
Цитата:
ключ должен быть 256-битным...Порядка 40 цифро-буквенных символов
Которые, прекрасно вмещаются на дискету 3.5. Будет дискета ключ.

Народ, какие будут соображения?

Отправлено: 18:23, 14-09-2006 | #3


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Admiral
Гм... Он говорит, что нет функции main. А нет её, потому что не определён макрос TEST при сборке. Вы вообще исходник читали? All tests passed он пишет, потому что в main'е реализовано примитивное тестирование: рандомным ключом шифруются и дешифруются рандомные же данные, а затем сравнивается что было и что есть.

Вы так и не ответили: какой именно алгоритм шифрования вам нужен? Их таки три, в приведённом исходнике реализованы 2, третий (самый простой и видимо нестойкий) не проблема реализовать самостоятельно с использованием функций оттуда. Поищите в Яндексе "ГОСТ шифрование". Там дофига объяснений как работает гост. Вам нужны функции gostcfbencrypt/gostcfbdecrypt либо gostofb (одна и та же для шифрования и расшифрования). Если вы понимаете алгоритм, то по параметрам абсолютно ясно как их использовать.

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

update
Цитата:
const char *F1="Source.txt",*F2="Dest.enc";
FILE *fFile;
fFile = fopen(F1,"r")
fscanf(fFile," %i ",sourse);
Интересный (а главное, неработающий) метод чтения из файла. Предлагаю ознакомиться с fseek/ftell/fread.

-------
http://ivank.ru


Отправлено: 18:56, 14-09-2006 | #4

Gets


Сообщения: n/a

Профиль | Цитировать


Реализацию алгоритма ГОСТ 28147-89 на С++ вы можете найти на сайте http://www.getsoft.com.ua в разделе ИСХОДНИКИ.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:55, 06-10-2006 | #5


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Gets раздел исходники не работают, только зря зарегился(

О нашел, для тех кто не смог найти, здесь: http://vuithelp.ru/files/3644.html есть прога шифрует и дешифрует по ГОСТ 28147-89, правда написано на C++ Buiilder

Отправлено: 18:35, 21-11-2009 | #6


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


вот тут нашел более приятную реализацию
http://www.plati.ru/asp/pay.asp?idd=154413

Отправлено: 20:44, 24-04-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - C/С++ | Крипто алгоритм ГОСТ (28147-89).

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Гост 34.11 Jonik-Mnimonik Программирование и базы данных 3 14-05-2008 12:18
Алгоритм pauluss Программирование и базы данных 1 06-10-2006 10:53




 
Переход