1 | ||||||
Алгоритм шифрования ГОСТ 28147-89. Режим простой замены12.03.2014, 16:39. Просмотров 10420. Ответов 16
Реализовывал алгоритм по wiki. Но что то не то получилось.Вот код:
P.S. Если возникли не понимания в коде спрашивайте разъясню: что делает, почему и как ![]()
0
|
|
12.03.2014, 16:39 | |
Нужны исходники программы шифрования и дешифрования файлов на базе алгоритма ГОСТ 28147-89 ГОСТ 28147-89 режим простой замены
|
|
taksebe
|
12.03.2014, 17:01
#2
|
Не по теме: Это вообще что такое??? :-|
0
|
12.03.2014, 19:42 [ТС] | 3 |
По конкретнее вопрос нельзя поставить?
Да и в заголовке указано что хотелось бы получить. Добавлено через 2 минуты Не по теме: taksebe, Я тоже на любой не понятный мне код могу написать как вы. НО, ведь можно же просто указать где именно не понятно. Или вам глобально все не понятно т.е. как объявлять переменные, методы и т.п.
0
|
35 / 10 / 6
Регистрация: 12.06.2013
Сообщений: 24
|
|
15.03.2014, 14:15 | 4 |
magnum1992, похоже, у Вас есть небольшие пробелы в понимании самого алгоритма. Я сильно не копался в коде, но что бросается в глаза:
1. У Вас нету сложения по модулю 2^32, у Вас просто сложение. 2. Вместо циклического сдвига на 11 бит влево у Вас просто сдвиг на 11 бит влево. В общем, если хотите разобраться в алгоритме, лучше почитайте Винокурова, там подробно и доступно написано. Кроме того, вот моя тема, в которой я реализовал рабочий алгоритм простой замены: Реализация алгоритма шифрования по ГОСТ 28147-89. Если понадобится реализация режима гаммирования или алгоритм генерации случайных 256-битовых ключей и 64-х битовой синхропосылки, можете заглянуть сюда.
0
|
16.03.2014, 20:18 [ТС] | 5 | |||||||||||||||
Andoku, Про циклический сдвиг я понял и уже переделал
![]() Добавлено через 3 минуты Я вынес весь алгоритм в отдельный класс и оформил более понятнее. Все перепроверил исправил несколько ошибок и получил в итоге что если я ввожу слово helloooo то он мне возвращает шифрованное слово oooohell и потом если его расшифровать возвращает исходное слово. Так вот где возможна ошибка? Добавлено через 58 секунд Не по теме: Может быть все правильно и это алгоритм так шифрует что бы никто не догадался:D Добавлено через 18 минут Andoku, Я на первый взгляд глянул ваш код и вот какие вопросы появились: Фрагмент вашего кода:
Добавлено через 1 минуту Кликните здесь для просмотра всего текста
Вот мой класс Добавлено через 30 минут Andoku, Про это на википедии не написано.
1
|
35 / 10 / 6
Регистрация: 12.06.2013
Сообщений: 24
|
|
16.03.2014, 21:07 | 6 |
![]() ![]()
0
|
16.03.2014, 22:26 [ТС] | 8 | |||||
В общем проблема решена путем разделения сети Фейстеля в отдельный метод. В методе en/decodePartData на столько было все запутано что уже и сам толком не мог разделить где что.
Вот полностью рабочий класс:
3
|
35 / 10 / 6
Регистрация: 12.06.2013
Сообщений: 24
|
|
16.03.2014, 23:12 | 9 |
magnum1992, объясню, почему у тебя так вышло: смотри, ты в основном шаге криптопреобразования делаешь сдвиг, то есть меняешь R на L. Далее, в методах en/decodePartData ты в конце еще раз переставляешь R и L (не знаю, есть ли эта операция в Википедии, но по Винокурову ее быть не должно). То есть, если бы в последнем шаге ты не делал эту самую перестановку R и L, тебе бы не пришлось еще раз менять их местами в en/decodePartData. Так что по сути, ты все равно не делаешь сдвиг по цепочке на последнем шаге
![]()
1
|
169 / 143 / 68
Регистрация: 02.10.2011
Сообщений: 613
|
||||||
21.12.2014, 17:03 | 10 | |||||
magnum1992,
0
|
0 / 0 / 0
Регистрация: 21.01.2015
Сообщений: 3
|
||||||||||||||||
21.01.2015, 10:50 | 11 | |||||||||||||||
magnum1992, спасибо за представленную реализацию. У меня несколько вопросов:
1. Проверял ты свой код на примере из Госта 34.11-94? В приложении А представлен процесс получения хэша, для шаговой функции строка 00000000 00000000 шифруется ключом 733d2C20 65686573 74746769 79676120 626e7373 20657369 326c6568 33206d54 на таблице замен, как у тебя, и получается 42ABBCCE 32BC0B1B. Я как крутил, у меня так и не получилось.. ![]() Потом я нашел этот пример в RFC 5831RFC 5831. В нем вроде написано, что это перевод, хотя значения ключа для шифрования другое.. ![]() K[1] = 733D2C20 65686573 74746769 326C6568 626E7373 20657369 79676120 33206D54 Я опять попробовал зашифровать и опять значения получились отличные от тех, что должны были. Потом я посмотрел твою реализацию. В методе func(UInt32 R, UInt32 Ki) в части сбора частей после замены:
По идее надо переставить строки в коде местами, т.е.
Дальше я посмотрел, что ты инвертируешь partsS до замены, а после замены - нет и сдвигаешь уже перевернутый uint. Как я понял, надо перевернуть после замены обратно, что я и сделал, но это тоже не помогло ![]() Я решил попробовать другие реализации - и из openssl, и ту которую сделал Andoku. Так и не получилось у меня.. Я решил написать свою ![]() .. но пример запустить у меня так и не получилось.. Может есть у кого рабочий пример? Или может кто знает, как запустить представленные реализации госта, чтоб он заработал? P.S. для запуска моей реализации - код такой: Кликните здесь для просмотра всего текста
Заранее спасибо!! ![]()
0
|
0 / 0 / 0
Регистрация: 21.01.2015
Сообщений: 3
|
|||||||||||
22.01.2015, 09:47 | 12 | ||||||||||
Все, понял.. Ключ в примере из ГОСТа 43.11-94 надо было перевернутым задавать.
т.е. вместо
0
|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 2
|
|
10.12.2015, 20:15 | 13 |
А можно как нибудь этот код связать с файлом. Что бы тот его шифровал и расшифровал?
0
|
0 / 0 / 0
Регистрация: 21.01.2015
Сообщений: 3
|
|
11.12.2015, 14:48 | 14 |
Да, можно. Я дал ссылку на свое приложение, но модератор ее стер за рекламу. Поищите в интернете.
0
|
Администратор
![]() |
|
12.12.2015, 01:35 | 15 |
GPrarok, в теории да. Методы SimpleEncoding/SimpleDecoding принимают на вход массив байт. Читаем файл с помощью File.ReadAllBytes и шифруем. Однако больщие файлы так не зашифровать из-за банальной нехватки ОЗУ. Плюс реализация принимает данные с длинами кратными восьми. Надо дописывать шифрование под данные произвольной длиный используя метод GammaСoding(byte[] data, byte[] s).
1
|
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 2
|
|
12.12.2015, 21:28 | 16 |
Спасибо большое, вот насчет метода GammaСoding(), поискал в интернете, не совсем разобрался как он будет работать, можете показать пример реализации в данном коде пожалуйста.
0
|
18 / 17 / 4
Регистрация: 22.03.2018
Сообщений: 701
|
||||||
02.11.2018, 23:06 | 17 | |||||
0
|
02.11.2018, 23:06 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Гост 28147-89 режим простой замены ГОСТ 28147-89 Режим простой замены. Исходный текст не совпадает с дешифрованным
алгоритм шифрования ГОСТ 28147-89 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |