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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подключил мультиметр к ПК, нужно считать показатели в с++. http://www.cyberforum.ru/cpp-beginners/thread1048932.html
Доброго времени суток, уважаемые форумчане. Подскажите пожалуйста: есть мультиметр APPA 190n, я подключил его к ПК, и теперь мне нужно считать показатели в с++. То есть мультиметр посылает (мы считываем) знаки (16) в с++, мы обрабатываем его по следующим правилам: -каждая группа знаков (по два знака, первые 6) делится на группы всего групп три, каждая со своим условием, пара принадлежит ко...
C++ Вычислительные процессы, линейные и ветвящиеся Написать коды 1) Линейного процесса 2) Ветвящегося процесса простейшие, вида, 7+4=11 http://www.cyberforum.ru/cpp-beginners/thread1048925.html
В данном тексте подсчитать все вхождения подстроки «abc» и удалить их C++
Задача программы такая: "В данном тексте подсчитать все вхождения подстроки «abc» и удалить их. Вывести два варианта результата: с пробелами вместо букв подстроки (длина текста остаётся такой же) и со сдвигом текста при удалении." Нашел только кусочек кода из Паскаля Var s:string; Begin write('Введите строку: ');readln(s); While Pos('от',s)<>0 do Delete(s,Pos('от',s),2); ...
C++ производные классы
Задание: Разработайте программу на языке С++, использующую наследование. Вариант 18. Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними: сложения, вычитания, умножения и деления. Создайте производный класс для реализации квадратных матриц с комплексными элементами. Элементы матрицы заносятся в двумерный массив....
C++ Вычислительные процессы, линейные и ветвящиеся http://www.cyberforum.ru/cpp-beginners/thread1048914.html
Написать коды 1) Линейного процесса 2) Ветвящегося процесса простейшие, вида, 7+4=11
C++ Массивы. Сравнить значение каждого элемента с его номером программа должна осуществлять ввод массива из 150 элементов(рандомно). затем она сравнивает значение каждого элемента с его номером, если номер окажется больше значения элемента в соответствующий элемент второго массива записывается 1, в противном случае туда записывается 0. подробнее

Показать сообщение отдельно
oks1d
4 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
19.12.2013, 22:41     Ошибка в функции!
Господа знатоки, открытое шифрование Эль-Гамаля, функция дешифрования работает не правильно,
например я шифрую текст: завтра в 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р
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru