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

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

Восстановить пароль Регистрация
 
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
19.12.2013, 22:41     Ошибка в функции! #1
Господа знатоки, открытое шифрование Эль-Гамаля, функция дешифрования работает не правильно,
например я шифрую текст: завтра в 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++ ошибка в функции
C++ Ошибка в функции
Ошибка в функции C++
Ошибка в функции C++
C++ Ошибка в функции
Ошибка в функции C++
Ошибка в функции C++
C++ Ошибка в функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 Посмотреть сообщение
Может быть ошибка в том, что ты русские буквы в консоль вводишь?
Нет, она принимает русские буквы
Yandex
Объявления
19.12.2013, 23:06     Ошибка в функции!
Ответ Создать тему
Опции темы

Текущее время: 17:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru