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

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

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

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

19.12.2013, 22:41. Просмотров 237. Ответов 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р
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 22:41     Ошибка в функции!
Посмотрите здесь:

Ошибка функции - C++
Почему у меня при обработке наипростейшей функции появляется ошибка: 1&gt;------ Построение начато: проект: Fun2, Конфигурация: Debug...

Ошибка в функции - 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++
У меня значения j должен изменятся от 0 до 9, а вместо этого он изменяется от 11 до 20, почему? Мой код: #include &lt;iostream&gt; ...

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

Функции. Ошибка( - C++
здравствуйте, помогите пожалуйста найти ошибку в тексте. Проблема вот в чем: Матрица просто вводится, но не преобразовывается. ...

Ошибка в функции - C++
Помогите исправить ошибку мне надо Составить функцию countX, которая, получив c и b через параметры по значению, &quot;а&quot; через глобальную...

Ошибка в функции - C++
Вот программа проблема с функцией &quot;ras&quot; не правильно работает надо вернуть значения vi,vj,v. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Ошибка в функции - 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++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { const int a = 2, b = 4, c = 5; ...

Ошибка в функции - C++
Всем доброго суток, не могу понять где ошибка, помогите: #include &lt;iostream&gt; #define N 4 using namespace std; void sortVib(int...

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

Ошибка в функции - C++
Не могу исправить ошибки можете помочь, тут в dynamic::dynamic(int n, int m, float l) ошибки: 1.error C2109: для индекса требуется массив...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
azoller
17 / 17 / 1
Регистрация: 03.05.2013
Сообщений: 114
19.12.2013, 22:46     Ошибка в функции! #2
Может быть ошибка в том, что ты русские буквы в консоль вводишь?
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
19.12.2013, 23:06  [ТС]     Ошибка в функции! #3
Цитата Сообщение от azoller Посмотреть сообщение
Может быть ошибка в том, что ты русские буквы в консоль вводишь?
Нет, она принимает русские буквы
Ответ Создать тему
Опции темы

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