Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 3
1

RSA C++ Builder

08.06.2013, 15:32. Показов 3567. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот код программы, ошибку вооще не понимаю, долбался с ней на протяжении нескольких дней... и решил создать темку...
Код:
Кликните здесь для просмотра всего текста
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <cstdlib.h>
#include <iomanip.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int p,q,p_simple,q_simple,d,n,e,MAX;
//---------------------------------------------------------------------------
int sundaram(int n)
{
        int *a = new int[n], i, j, k;
    memset(a, 0, sizeof(int) * n);
    for (i = 1; 3 * i + 1 < n; i++)
        {
            for (j = 1; (k = i + j + 2 * i * j) < n && j <= i; j++)
                        a[k] = 1;
    }
    for (i = n - 1; i >= 1; i--)
        if (a[i] == 0)
                {
                return (2 * i + 1);
            break;
        }
    delete[]a;
        return 1;
}
//---------------------------------------------------------------------------
int gcd(int a, int b)
{
    int c;
    while (b)
        {
        c = a % b;
        a = b;
        b = c;
    }
    return abs(a);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        p = Edit1->Text.ToInt();
        q = Edit2->Text.ToInt();
        p_simple = sundaram(p);
        q_simple = sundaram(q);
        n = p_simple * q_simple;
        int d_simple = 0, e_simple = 0;
        while (d_simple != 1)
        {
                d = rand() % 100;
        d_simple = gcd(d, ((p_simple - 1) * (q_simple - 1)));
        }
        while (e_simple != 1)
        {
                e += 1;
        e_simple = (e * d) % ((p_simple - 1) * (q_simple - 1));
        }
        Edit1->Text = IntToStr(p_simple);
        Edit2->Text = IntToStr(q_simple);
        Label6->Caption = IntToStr(n);
        Label7->Caption = IntToStr(e);
        Label8->Caption = IntToStr(d);
        Label4->Caption = "Open key:" + IntToStr(e) + "," + IntToStr(n);
        Label5->Caption = "Close key:" + IntToStr(d) + "," + IntToStr(n);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        MAX = Edit3->Text.Length();
        MAX +=1;
        unsigned int *CryptoText = new unsigned int[MAX];
    char *Text1 = new char[MAX];
        Text1 = AnsiString(Edit3->Text).c_str();
    int b = 301;
    int c;
    for (int j = 0; j < MAX-1; j++)
        {
        c = 1;
        unsigned int i = 0;
        int ASCIIcode = (static_cast<int>(Text[j])) + b;
        while (i < e)
                {
            c = c * ASCIIcode;
            c = c % n;
            i++;
        }
        CryptoText[j] = c;
        b += 1;
    }
    for (int j = 0; j < MAX; j++)
        {
        Text1[j] = static_cast<char>(CryptoText[j]);
    }
        AnsiString CT = AnsiString((char*)Text1);
        Edit4->Text = CT;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        unsigned int *CryptoText = new unsigned int[MAX];
    unsigned int *Tdecrypt = new unsigned int[MAX];
        MAX = Edit3->Text.Length();
        MAX +=1;
    char *Text1 = new char[MAX];
        Text1 = AnsiString(Edit4->Text).c_str();
    for (int j = 0; j < MAX; j++)
        {
        CryptoText[j] = static_cast<int>(Text[j]);
    }
    int b = 301;
    int m;
    for (int j = 0; j < MAX; j++)
        {
        m = 1;
        unsigned int i = 0;
        while (i < d)
                {
            m = m * CryptoText[j];
            m = m % n;
            i++;
        }
        m = m - b;
        Tdecrypt[j] = m;
        b += 1;
    }
    for (int j = 0; j < MAX; j++)
        {
        Text1[j] = static_cast<char>(Tdecrypt[j]);
    }
        AnsiString CT = AnsiString((char*)Text1);
    Edit5->Text = CT;
}
//---------------------------------------------------------------------------

Помогите пожалуйсто.
Кликните здесь для просмотра всего текста
проект нужно еще впихнуть в чат... но помощь прошу только с етим)

Edit6-9 пока не задействованы...(тоисть остаються пустыми)
суть программы:"пишем 2 числа-генерируем ключи для шифровки/розшифровки, потом вводим текст и нажимаем /"Енкрипт/", потом для проверки копируем зашифрованый текст и впихаем его в месаж и нажимаем /"Декрипт/" должно розшифровать..."
исходники я брал с Интернета...
до этого делал Цезаря... он работал только шифровал английкий)
Миниатюры
RSA C++ Builder   RSA C++ Builder   RSA C++ Builder  

Вложения
Тип файла: zip piwem cami.zip (898.3 Кб, 81 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2013, 15:32
Ответы с готовыми решениями:

Можно ли использовать C++ Builder v11 если купить Embarcadero C++Builder XE8
День добрый! Есть старый проект С++. Он компилируется на CodeGear™ C++Builder Version 11. Но на...

Как использовать компоненты скомпилированные для C++ Builder 2007 в C++ Builder 2010?
Народ! Такая проблема... Есть набор компонентов т.н. Dicom VCL. Сайт производителя -...

Как открыть проект C++Builder 6 в Embarcadero C++Builder 10.3 Community Edition?
Здравствуйте. Как открыть проект C++Builder 6 в новом Embarcadero C++Builder 10.3 Community Edition?

Какой компилятор C++ Builder использовать? Rad Studio 2009 глючит. C++ Builder 6 старый
Много раз замечал непонятки с компилятором. Масла в огонь подлил Какой посоветуете?

3
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2013, 01:49 2
Если задача практическая - можно использовать CryptoApi
0
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 3
09.06.2013, 21:28  [ТС] 3
хмм, не пользовался... а если немного подробнее, буду благодарен(так сказать "на блюдце")

Добавлено через 2 минуты
пока почитаю то что нарыл, благодарен

Добавлено через 10 часов 29 минут
посоветуюсь с преподователем, а так отлично нашел статейку где все описано)
http://www.rsdn.ru/article/cry... ptoapi.xml

Добавлено через 4 часа 8 минут
сделаю проект залью... потестите)

Добавлено через 2 минуты
Вот кароче работающий(примитивный):
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
#include <iostream>
#include <conio.h>
#include <vector>
#include <windows.h>
#include <wincrypt.h>
 
int main()
{
HCRYPTPROV hProv;
HCRYPTKEY hSessionKey;
 
// Ïîëó÷åíèå êîíòåêñòà êðèïòîïðîâàéäåðà
if (!CryptAcquireContext(&hProv, NULL, NULL,
    PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
  std::cout<<"CryptAcquireContext";
  getch();
  exit(1);
}
 
std::cout << "Cryptographic provider initialized" << std::endl;
 
// Ãåíåðàöèÿ ñåññèîííîãî êëþ÷à
if (!CryptGenKey(hProv, CALG_RC4, 
    AT_KEYEXCHANGE, &hSessionKey))
{
  std::cout<<"CryptGenKey";
  getch();
  exit(1);
}
 
std::cout << "Session key generated" << std::endl;
 
// Äàííûå äëÿ øèôðîâàíèÿ
char string[]="Tester Vadim here!@#$1234";
DWORD count=strlen(string);
 
// Øèôðîâàíèå äàííûõ
if (!CryptEncrypt(hSessionKey, 0, true, 0, (BYTE*)string, 
    &count, strlen(string)))
{
  std::cout<<"CryptEncrypt";
  getch();
  exit(1);
}
 
std::cout << "Encryption completed" << std::endl;
 
// Òåñòîâûé âûâîä íà ýêðàí
std::cout << "Encrypted string: " << string << std::endl;
 
system("pause");
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Ðàñøèôðîâûâàíèå äàííûõ
if(!CryptDecrypt(hSessionKey, 0, true, 0, (BYTE*)string, &count))
{
  std::cout << "CryptDecrypt";
  getch();
  exit(1);
}
 
std::cout << "Decryption completed" << std::endl;
 
 // Òåñòîâûé âûâîä íà ýêðàí
std::cout << "Decrypted string: " << string << std::endl;
 
 // Îñâîáîæäåíèå êîíòåêñòà ëîêàëüíûõ ïåðåìåííûõ
CryptDestroyKey(hSessionKey); 
CryptReleaseContext(hProv, 0);
system("pause");
return 0;
}
Добавлено через 1 час 1 минуту
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
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <conio.h>
#include <vector>
#include <windows.h>
#include <wincrypt.h>
int main()
{
        HCRYPTPROV hProv;
        HCRYPTKEY hSessionKey;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
// Получение контекста криптопровайдера
        if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
        {
                std::cout<<"CryptAcquireContext";
                getch();
                exit(1);
        }
        std::cout << "Cryptographic provider initialized" << std::endl;
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
/*
// Инициализация контекста криптопровайдера (с указанием имени
// контейнера ключей)
        if (!CryptAcquireContext(&hProv, "{EB57ED8A-CCCC-4bf5-8659-9DF2F05F24AD}", NULL, PROV_RSA_FULL, 0))
        {
                std::cout<<"CryptAcquireContext";
                getch();
                exit(1);
        }
        std::cout << "Cryptographic provider initialized" << std::endl;
*/
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
// Генерация сессионного ключа
        if (!CryptGenKey(hProv, CALG_RC4, AT_KEYEXCHANGE, &hSessionKey))
        {
                std::cout<<"CryptGenKey";
                getch();
                exit(1);
        }
        std::cout << "Session key generated" << std::endl;
        std::cout << "Session key :"; std::cout << hSessionKey << std::endl;
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
// Данные для шифрования
        char string[]="Вадим тута Vadim tyta~!@#$%^&*()_+";
        DWORD count=strlen(string);
// Шифрование данных
        if (!CryptEncrypt(hSessionKey, 0, true, 0, (BYTE*)string, &count, strlen(string)))
        {
                std::cout<<"CryptEncrypt";
                getch();
                exit(1);
        }
        std::cout << "Encryption completed" << std::endl;
// Тестовый вывод на экран
        std::cout << "Encrypted string: " << string << std::endl;
        system("pause");
        
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
/*
// Получение ключа для экспорта ключа шифрования
        if (!CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hPublicKey))
        {
                std::cout<<"CryptGetUserKey";
                getch();
                exit(1);
        }
 
        std::cout << "Public key is received" << std::endl;
 
        count = 0;
 
// Получение размера массива, используемого для экспорта ключа
        if (!CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, NULL, &count))
        {
                std::cout<<"CryptExportKey1";
                getch();
                exit(1);
        }
 
// Инициализация массива, используемого для экспорта ключа
        BYTE* data = static_cast<BYTE*>(malloc(count));
        ZeroMemory(data, count);
 
// Экспорт ключа шифрования
        if (!CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, data, &count))
        {
                std::cout<<"CryptExportKey2";
                getch();
                exit(1);
        }
 
        std::cout << "Key's export completed" << std::endl;
*/
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
// Расшифровывание данных
        std::cout << "Session key : "; std::cout << hSessionKey << std::endl;
        if(!CryptDecrypt(hSessionKey, 0, true, 0, (BYTE*)string, &count))
        {
                std::cout << "CryptDecrypt";
                getch();
                exit(1);
        }
        std::cout << "Decryption completed" << std::endl;
 // Тестовый вывод на экран
        std::cout << "Decrypted string: " << string << std::endl;
 // Освобождение контекста локальных переменных
        CryptDestroyKey(hSessionKey);
        CryptReleaseContext(hProv, 0);
        system("pause");
        return 0;
}
вот более мение работающий шифратор(симетричный ключ)
потом просто планирую симетричный шифровать асиметричным)

Добавлено через 45 секунд
вот только с русским проблема....

Добавлено через 1 час 19 минут
с русским проблем нет, тольько в консольке...
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
20.12.2013, 05:16 4
получилось реализовать все это с интерфейсом?
0
20.12.2013, 05:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2013, 05:16
Помогаю со студенческими работами здесь

Как заставить проект Builder 6 загруженный в Builder 2007 отображать новые кнопки
Люди добрые, кто нибудь встречался с такой проблемой: Я установил Builder 2007, загрузил в него...

Как заставить проект сделанный на C++ Builder 6.0 работать на компьютере на котором не установлен этот самый Builder
вопрос абсолютно нубский,но очень волнует...но как заставить проект сделанный на C++ Builder 6.0...

можно ли в С++ Builder 2006 писать программы на С++ Builder 6?
подскажите, пожалуйста... если программка написана на С++ Builder 2006, могу ли я перевести проект...

Перевод проекта с Builder 2010 на Builder 10 Seattle
Добрый день. Перевожу проект написанный на С++ с Builder 2010 на Builder 10 Seattle. В...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru