Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   C/С++ | Крипто алгоритм ГОСТ (28147-89). (http://forum.oszone.net/showthread.php?t=70866)

Admiral 05-09-2006 18:20 481325

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

ivank 05-09-2006 18:55 481341

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

Цитата:

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

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

Admiral 14-09-2006 18:23 484960

Спасибо за отзыв 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. Будет дискета ключ.

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

ivank 14-09-2006 18:56 484972

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.

Gets 06-10-2006 17:55 494417

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

straj 21-11-2009 18:35 1276599

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

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

STEVER 24-04-2011 20:44 1665038

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


Время: 19:21.

Время: 19:21.
© OSzone.net 2001-