Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
#1

Ошибка в функции! - C++

19.12.2013, 22:41. Просмотров 251. Ответов 2
Метки нет (Все метки)

Господа знатоки, открытое шифрование Эль-Гамаля, функция дешифрования работает не правильно,
например я шифрую текст: завтра в 8 часов , задаю параметры p,g,x , идет шифрование , зашифрованное сообщение получается например (7807 29351 1613 15576 9709 12646 20899 28406 2529 1648 31851 26996 16811 22620 6035 11610 3487 6188 28203 2180 15971 12776 16771 20323 25461 5380 6561 28225 12387 33270 24069 16158 )

А дешифровывается так: Щшnўp|t®T,ё©Фб"–

Я не могу найти ошибку!

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
 
#pragma hdrstop                  // Предоставляет дополнительный элемент управления по именам файлов предварительной компиляции и над местоположением на котором сохраняется состояние компиляции
 
 
using namespace std;
 
int power(int a, int b, int n){// a^b mod n
    int tmp=a;
    int sum=tmp;
    for(int i=1;i<b;i++){
        for(int j=1;j<a;j++){
            sum+=tmp;
            if(sum>=n){
                sum-=n;
            }
        }
        tmp=sum;
    }
    return tmp;
}
 
int mul(int a, int b, int n){// a*b mod n
    int sum=0;
     
    for(int i=0;i<b;i++){
        sum+=a;
         
        if(sum>=n){
            sum-=n;
        }
    }
 
    return sum;
}
 
 
void crypt(int p,int g,int x, string inFileName,string outFileName){
 
setlocale( LC_ALL,"Russian" );
    ifstream inf(inFileName.c_str());   //Формирует массив строк  И возвращает указатель на него.
    ofstream outf(outFileName.c_str()); 
    cout<<"Введите p,g,x\n";
    cin>>p>>g>>x;
    int y=power(g,x,p);
    printf("Открытый ключ (p,g,y)=", setlocale(LC_ALL, "Russian"));
    cout<<""<<"("<<p<<","<<g<<","<<y<<")"<<endl;
    cout<<"Закрытый ключ x="<<x<<endl;
    cout<<"Введите текст который необходимо зашифровать\n";
 
 
    while(inf.good()){
        int m=inf.get();
        if(m>0){
            cout<<(char)m;
 
            int k=rand()%(p-2)+1; // 1 < k < (p-1)
            int a= power(g,k,p);
            int b= mul(power(y,k,p),m,p);
            outf<<a<<" "<<b<<" ";
        }
    }
 
    cout<<endl;
 
    inf.close();
    outf.close();
}
 
void decrypt(int p,int x,string inFileName,string outFileName){
    
    ifstream inf(inFileName.c_str());
    ofstream outf(outFileName.c_str());
    setlocale( LC_ALL,"Russian" );
    
    cout<<"\nДешифрованый текст:"<<endl;
 
    while(inf.good()){
        int a=0;
        int b=0;
        inf>>a;
        inf>>b;
 
        if(a!=0&&b!=0){
 
 
            int deM=mul(b,power(a,p-1-x,p),p);// m=b*(a^x)^(-1)mod p =b*a^(p-1-x)mod p 
            char m=static_cast<char>(deM);
            outf<<m;
            cout<<m;
        }
    }
 
    cout<<endl;
 
    inf.close();
    outf.close();
}
 
int main(){
    srand(time(NULL));
    setlocale( LC_ALL,"Russian" );
    int p=0,g=0,x=0;
    crypt(p,g,x, "input.txt","outsh.txt");  
    decrypt(p,x, "outsh.txt","outdesh.txt");
    system("pause");
    return 0;
}
Так же необходимо в папке с проектом создать файл input.txt ( сюда записывать то что хочешь зашифровать), если кто захочет покапаться конечно)

Добавлено через 32 минуты


Добавлено через 25 секунд


Добавлено через 1 час 4 минуты
500 рублей скину куда скажете, если заставите работать функции дешифровки и сделаете проверку для переменной p, она должна быть простым числом. за одну функцию дешифровки 250р
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в функции! (C++):

А почему ошибка, что функции print и read не определены в функции main()? - C++
Что-то не понимаю. Они определены в заголовочном файле. А подчеркивается красным что нет.... #include &lt;iostream&gt; #include...

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов" - C++
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include &lt;functional&gt; #include &lt;string&gt; #include...

Ошибка в Функции - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;iomanip.h&gt; bubbleSort(int , const int); ...

Ошибка в функции - C++
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; using namespace std; int maxFunction(int a , int n) { int max=a; for(int i=0;...

Ошибка в функции - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;Windows.h&gt; #include &lt;iomanip&gt; using namespace std; char bufUkr; char...

Ошибка в функции - C++
я написал функцию для загрузки графа из файла, но при попытке открытия происходит ошибка ...что нужно...

2
azoller
17 / 17 / 1
Регистрация: 03.05.2013
Сообщений: 114
19.12.2013, 22:46 #2
Может быть ошибка в том, что ты русские буквы в консоль вводишь?
0
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
19.12.2013, 23:06  [ТС] #3
Цитата Сообщение от azoller Посмотреть сообщение
Может быть ошибка в том, что ты русские буквы в консоль вводишь?
Нет, она принимает русские буквы
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2013, 23:06
Привет! Вот еще темы с ответами:

Ошибка в функции - C++
не работает функция вывод помогите пожалуйста я задаю 1 букву модели монитора он должен выдать все об этом мониторе исправте пожалуйста. ...

ошибка в функции - C++
Где может быть ошибка? и почему обычно она возникает? Компиляция... 2.cpp 2.cpp(79) : error C4430: отсутствует спецификатор...

Ошибка в функции - C++
Ошибка в функции if ((m % 2 == 0) &amp;&amp; (n % 2 == 1)) { for (int i = 0; i &lt; n; i++) for (int j = 0; j &lt; m; j++) { ...

Ошибка в функции - C++
(Задача см.вложение) Помогите пожалуйста! Ошибка: Необработанное исключение по адресу 0x0F971DA9 (msvcr110d.dll) в Проект2.exe:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru