Показать полную графическую версию : C/С++ | Крипто алгоритм ГОСТ (28147-89).
На сайте www.vipul.net/gost/ (http://www.vipul.net/gost/) есть файл (http://www.vipul.net/gost/software/gost.c) для языка С. Он не компилируется в MS Visual C (6 net 2003/2005) но нормально работает в CodeBlocks.
Вопрос в следующем, как на его основе создать консольную шифровалку по такому принципу - gost.exe ischod.txt pass shufrovanya.txt ?
В моем понимании я считываю файл в переменную шифрую и сохраняю в новый файл.
Подскажите кто знает.
Во-первых, прфеикс *Практика* был выбран неверно. (Согласно рекомендация hasherfrog).
Во-вторых, с какими ошибками оно не компилируется в VC6?
В-третьих, ГОСТ определяет, как минимум 3 варианта шифрования (вернее, 2 метода шифрования и один хэширования). Какой из них вас интересует? Все три метода в исходнике есть, даже с краткими пояснениями, что делается.
В моем понимании я считываю файл в переменную шифрую и сохраняю в новый файл.Правильное понимание. Есть какие-то проблемы с реализацией? Главное, что нужно знать, гост - шифр блочный. С 64 битными блоками. Соответственно, требуется хранить длину оригинального файла файла и добить при шифровании его случайными символами до длины кратной 64 битам.
Ну и последнее, ключ должен быть 256-битным. Что требует ОЧЕНЬ длинного пароля, если его использовать в качестве ключа. Порядка 40 цифро-буквенных символов. Можно, конечно, применять его хэш. Но наверное, это снизит общую криптостойкость.
Спасибо за отзыв 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. Будет дискета ключ.
Народ, какие будут соображения?
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.
Реализацию алгоритма ГОСТ 28147-89 на С++ вы можете найти на сайте http://www.getsoft.com.ua в разделе ИСХОДНИКИ.
Gets раздел исходники не работают, только зря зарегился(
О нашел, для тех кто не смог найти, здесь: http://vuithelp.ru/files/3644.html есть прога шифрует и дешифрует по ГОСТ 28147-89, правда написано на C++ Buiilder
вот тут нашел более приятную реализацию
http://www.plati.ru/asp/pay.asp?idd=154413
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.