• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

C++. Упрощённая реализация RSA. Не хватает доступного диапазона чисел для корректных

kostuzhoff

Ученик
Регистрация
13 Июн 2012
Сообщения
1
Реакции
0
Баллы
0
C++. Упрощённая реализация RSA. Не хватает доступного диапазона чисел для корректных

Убедительная просьба помочь. Схематично реализую алгоритм шифрования RSA. Каждый символ введённой строчки преобразуется в ASCII-код, после чего этот код шифруется и дешифруется. Ссылка на педивикию: RSA — Википедия.
С математикой вроде бы всё в порядке, но из за нехватки диапазона чисел, выдаёт неправильные цифры и символы. Как быть?

Код:
#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>


void main()
{
    const short p=11,q=23;
    char af[20];
    int i,e,d;
    char ch;
    int shifr,a,deshifr;
    unsigned long long f,n,b,c;
    n=q*p;
    printf("n=%d\n",n);
    f=(p-1)*(q-1);
    printf("f=%d\n",f);
    d=17;
    printf("d=%d\n",d);
    e=13;
    printf("e=%d\n",e);
    printf("Vvedite message!\n");
    gets(af);
    for(i=0;i<strlen(af);i++)
        {
        a=af[i];
        printf("  %c  ",af[i]);
        printf(" -> ");
        printf("%5d",a);
        printf(" -> ");
        b=1;
        for(int o=1;o<=e;o++)
            {
                b=b*a;
            }
        shifr=b%n;
        printf("%5d",shifr);
        printf(" -> ");
        //send "shifr" to 2nd
        c=1;
        for(int o=1;o<=d;o++)
            {
                c=c*shifr;
            }
        deshifr=c%n;
        printf("%5d",deshifr);
        printf(" -> ");
        ch=deshifr;
        printf("  %c  \n",ch);
        }
    getch();
}
 
Наверное длинная арифметика. (файлы + например тип vector)
 
Можно еще посмотреть к примеру в сторону библиотеки GMP
 
Назад
Сверху