13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|
1 | |
ГОСТ 3410 / Работа с длинными числами01.10.2008, 12:20. Показов 17701. Ответов 75
Метки нет (Все метки)
Начал делать курсовик по реализации ЭЦП по ГОСТ 34.10 (и соответственно 34.11 и 28147 ). В качестве среды разработки выбрал C++ Builder.
Возник вопрос: Как работать с большими числами размером в 256,512,1024 бит? Они, ведь, ни в один тип данных не лезут (int только 32 бита). В контрольком примере дано число 57896044618658097711785492504343953926634992332820282019728792003956564821041. P.S Чужая реализация 3410-01 Но, есть сильное подозрение а то, что препода "кинули" - подсунили ему в место ГОСТ 3410-2001, забугорский ECDSA. Мой курсовик: Недостатки: 1) Результат проверки не совпадает с генерированой подписью. Проблема в математике. 2) Нет создания хэша функции по ГОСТ 3411 3) Нет вычисленя параметров ЭК. 4) Длительное время работы (прога не зависла - она считает)
0
|
01.10.2008, 12:20 | |
Ответы с готовыми решениями:
75
Работа с длинными числами Работа с длинными числами Работа с длинными числами Работа с длинными числами (Delphi 7) |
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
01.10.2008, 13:23 | 2 |
есть арифметика длинных чисел, почитай С. Оклов "Программирование в алгоритмах"
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|
06.10.2008, 18:11 [ТС] | 3 |
А нельзя просто выделить память под переменную в 256 бит?
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
06.10.2008, 18:14 | 4 |
ну так в один бит ты как цифру записать собрался? глянь типы данных, там по-любому есть тип, который в себя вместит число, просто с помощью арифметики длинных числе можно реализовать быстрые алгоритмы для работы с такими числами
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|
20.10.2008, 10:30 [ТС] | 5 |
Нашел материал по работе с длинными числами - Щербаков, Домашев Прикладная криптография. Но, к сожалению не могу заставить работать хотя бы первый алгоритм сложения - не выполняется перенос разряда. В чем проблема?
http://slil.ru/26253252 - все о госте http://slil.ru/26253265 - не работающая прога http://slil.ru/26253351 - Щербаков, Домашев Прикладная криптография
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
20.10.2008, 10:41 | 6 |
сложение длинных чисел
Код
void add(int a[N], int b[N], int c[N]){ memset(c, 0, sizeof(int)*N); int i = 0; for(i = N - 1; i >= 0; i--){ if(t.quot){ c[i]++; if(i < ctrl) ctrl = i; } t = div((c[i] + a[i] + b[i]),10); c[i] = t.rem; } }
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
||||||
20.10.2008, 19:32 [ТС] | 7 | |||||
Объясните этот код:
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
20.10.2008, 20:21 | 8 |
(__int64) - это приведение типа, LoDigit(T) - возвращает младшие 4 байта
HiDigit(T) - старшие 4 байта, чар используется для того, чтобы был один байт... ну а вообще - алгоритм прост... иммитация сложения столбцом... только человек эффективнее использует элементы массива, в отличии от моего алгоритма... да и по-хорошему, ты бы мог и потрассировать алгоритм, тогда будет видно, что там и зачем делается
1
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|
20.10.2008, 20:35 [ТС] | 9 |
1) Спасибо
2) Как работает #define HiDigit(T) ((int)((T)>>m))? Сам понял, что число T помещается в поток, а ((int)((T)>>m)) что делает? За счет, чего помещается в старшие 4 байта. 3) Почему при сложении int a[]={2,2,9} и b[]={1,2,9} получается С[i]={3,4,18} т.е нет переноса. 4) Трассировку хорошо бы сделать, но не ясно как. В меню Run можно выполнить только команду Run, а по шагам нельзя.
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
20.10.2008, 21:31 | 10 |
>> - это в данном случае сдвиг на 32 бита
ну так при выводе будет 1843... а переполнение - это когда число больше байта будет по идее...
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|||||||||||
20.10.2008, 22:34 [ТС] | 11 | ||||||||||
Unit1_math.cpp
[Linker Error] Unresolved external 'Zero(int *, int)' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\3410_ARIFMETIKA\UNIT1_MATH.OBJ
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
21.10.2008, 10:45 | 12 |
прототип Zero описан, даже есть вызов функции, ну а где же ее реализация-то?
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|||||||||||
21.10.2008, 12:41 [ТС] | 13 | ||||||||||
Возникли еще вопросы. Как работают функции, ведь в них есть только передача параметров:
Добавлено через 3 минуты 7 секунд Второй вопрос. Unit1_math.h:
Как понял, проблемы с областью видимости функции zero. Что надо исправить?
0
|
1 / 1 / 0
Регистрация: 21.10.2008
Сообщений: 25
|
|
21.10.2008, 12:43 | 14 |
Я возможно не по теме, но все же. У меня аналогичный курсовик (Реализация ГОСТ 34.10-94).
Вопрос к IS, у тебя есть нормальный вариант этого ГОСТа? Просто все что я находил в интернете содержит ошибки, да и из текста становится понятно, что некоторые операции написаны неверно.
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
21.10.2008, 12:57 | 15 |
*bkmz, вот бери его исходник и подгоняй под себя, а то на все готовенькое попасть - это же жутко скучно... а покой нам только снится
IS, где реализация функции zero? я что-то так и не нашел в твоем листинге...
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
|
21.10.2008, 12:59 [ТС] | 16 |
*bkmz, Свой гост брал на http://protect.gost.ru/, но сейчас что-то глючит.
реализация описана http://slil.ru/26253351 - Щербаков, Домашев Прикладная криптография. Но, как видешь, пока не могу заставить работать арифметические операции. Может у тебя получится. Если заработает, то сообщи.
0
|
1 / 1 / 0
Регистрация: 21.10.2008
Сообщений: 25
|
|
21.10.2008, 13:19 | 17 |
Возможно был неправильно вопрос мой понят, мне не нужны исходники, а нужен нормальный текст ГОСТа. Что касается исходников, то я пишу все сам.
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
21.10.2008, 13:28 | 18 |
IS, блин, да что там непонятно, у тебя нет реализации функции зеро, просто ее прототип и вызов в теле программы... напиши реализацию этой функции и будет тебе счастье
*bkmz, просто тут слишком часто просят именно сырцы... вот и поэтому я так тебе ответил, ничего личного...
0
|
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
|
||||||
21.10.2008, 14:52 [ТС] | 19 | |||||
WooDooMan, Извиняюсь, просто не заметил, что появилась вторая страница и я решил, что сообщение не отправилось.
Теперь к делу. Действительно, нет реализации - у авторов эта функция так и приводится без реализации, не ясно за чем. Реализацию добавил.
Вопросы: 1) Что должен делать макрос #define MaxDigit ((int)(-1));? 2) Как определить количество элементов в массиве?
0
|
1 / 1 / 0
Регистрация: 21.10.2008
Сообщений: 25
|
|
21.10.2008, 15:08 | 20 |
WooDooMan, да ничего страшного, понимаю..
0
|
21.10.2008, 15:08 | |
21.10.2008, 15:08 | |
Помогаю со студенческими работами здесь
20
Функция с++ (работа с длинными числами - вывод результата в файл) Действия с длинными числами Сочетания с длинными числами Операции с длинными числами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |