uits
Гость
|
|
« : 06-05-2010 00:41 » |
|
Здравствуйте. Подскажите пожалуйста, как можно написать функцию, чтобы она возводила в степень большие числа? Это нужно для шифрования методом RSA. Например ,29^13 - и результат уже выходит за границк диапазона __int64...
Стандартная функция pow не подходит. Хотя может быть дело не в самописной функции... А как диапазон больше сделать?
|
|
« Последнее редактирование: 06-05-2010 05:03 от RXL »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 06-05-2010 03:13 » |
|
uits, тебе нужна библиотека больших чисел. Например, GMP. Поищи по форуму - подобная тема минимум дважды появлялась.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
uits
Гость
|
|
« Ответ #2 : 06-05-2010 04:13 » |
|
Хай. Разрабатываю межсетевой экран на c++. Нужно чтобы он, отправляя пакет, данные зашифровывал алгоритмом RSA. Вопрос: как эти данные разбить на блоки (причем log в режиме ядра не пойдет) и представить в виде чисел из диапазона (0, n-1), которые потом можно будет в степень возвести? Там ведь будут только 0 и 1... Заранее спасибо.
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #3 : 06-05-2010 04:50 » |
|
uits, ты хоть сам понимаешь то что ты написал?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #4 : 06-05-2010 05:03 » |
|
uits, задача у тебя одна - не стоит делать много тем. Давай ограничимся обсуждением в одной.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
uits
Гость
|
|
« Ответ #5 : 06-05-2010 05:51 » |
|
ок. так и создана одна, а в ней 2 вопроса. ладно, я тут впервые, поэтому приношу извинения, если что-то было сделано мной не по правилам. т.е. мне где 2 вопрос задать? p.s. по-моему все конкретно. а что не понятного?
|
|
|
Записан
|
|
|
|
uits
Гость
|
|
« Ответ #6 : 06-05-2010 05:52 » |
|
для Serg79: а что не так-то?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #7 : 06-05-2010 05:53 » |
|
uits, я объединил твои две темы в одну, а третью - дублированную, удалил. Прочти правила нашего форума, чтобы не повторять ошибок: https://forum.shelek.ru/index.php?action=vu-rules#post_rules
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
uits
Гость
|
|
« Ответ #8 : 06-05-2010 05:55 » |
|
хорошо. ясно. еще раз извиняюсь.
|
|
|
Записан
|
|
|
|
uits
Гость
|
|
« Ответ #9 : 06-05-2010 05:57 » |
|
Ну так может кто-нибудь знает, как сообщение разбить на блоки и представить в виде число?
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #10 : 06-05-2010 06:02 » |
|
Мда. Действительно лажа полнейшая. Может попробуешь поподробнее ты хотя бы знаешь что понимается под словосочетанием межсетевой экран? причем log в режиме ядра не пойдет
о каком log'е идет речь? c++ в ядре это по твоему нормально?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #11 : 06-05-2010 06:03 » |
|
uits, извини, но ты говоришь полную чепуху и по этому тебя никто не понимает и не отвечают на твои вопросы. Попробуй обдумать вопрос и выразить его в понятной форме! Попробуй "плясать от печки" - начать с основ задачи, без углубления в дебри.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Вад
|
|
« Ответ #12 : 06-05-2010 06:04 » |
|
Допустим, есть число 4893, а n = 12. То есть, мы можем кодировать числа от 0 до 11. Навскидку вижу 2 варианта: 1. Вариант грубый (с избыточностью): брать наибольшее k бит такое, что 2^k < n. В случае с 12, это октет - 3 бита. То, что числа 8..11 встречаться в открытом тексте не будут - увы, избыточность 4893->011435, кодируем 5 "блоков", (1, 1, 4, 3, 5). 2. Вариант тонкий: переводить открытый текст в 12-ричный код. И кодировать символы этого кода.
|
|
« Последнее редактирование: 06-05-2010 06:06 от Вад »
|
Записан
|
|
|
|
uits
Гость
|
|
« Ответ #13 : 06-05-2010 06:23 » |
|
межсетевой экран на C++ - такое задание. log - это в когда в алгоритме RSA нужно разбить сообщение на K = log2(n) бит. Каждый из этих блоков может быть представлен в виде числа M(i)=0,1,2..., n-1. В DDK логарифмы не используются. Вопрос: как разделить сообщение и представить его в виде числа, чтобы потом возвести в степень e?
|
|
|
Записан
|
|
|
|
uits
Гость
|
|
« Ответ #14 : 06-05-2010 06:34 » |
|
Т.е. нужно разбить сообщение на блоки, каждый из которых может быть представлен в виде числа M(i)=0,1,2..., n-1. Чтобы потом зашифровать по формуле C(i)=(M(I)^e)mod n.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #15 : 06-05-2010 07:10 » |
|
log - это в когда в алгоритме RSA нужно разбить сообщение на K = log2(n) бит. Каждый из этих блоков может быть представлен в виде числа M(i)=0,1,2..., n-1.
Ну вот, как раз первый вариант, про который я говорил. Так а зачем логарифм? Значением логарифма в данном случае будет порядковый номер старшего значащего бита числа n. То есть, если n, скажем, равно 18, то старший бит - 4. log2(18)=~4
|
|
|
Записан
|
|
|
|
uits
Гость
|
|
« Ответ #16 : 16-05-2010 02:16 » |
|
Спасибо. И еще вопрос. Реализована программа для шифрования символов, введенных в edit. Необходимо сделать так: взять файл любого формата (включая web-страницу), закодировать его и сохранить. Соответственно, затем взять этот закодированный файл, расшифровать и также передать. Как это сделать? Помогите, пожалуйста!
|
|
|
Записан
|
|
|
|
|