Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
sergyuk
0 / 0 / 0
Регистрация: 14.06.2010
Сообщений: 57
1

Шифр RSA

21.03.2013, 17:44. Просмотров 608. Ответов 0
Метки нет (Все метки)

Необходимо описать шифр RSA
Все казалось бы сделано, но программа не всегда работает корректно, при одних значениях все норм, при других совсем не то, в чем может быть проблема? Очень нужна помощь, немерено сил уже ушло на это.
И да, там вместо кодов символов, на данный момент берутся просто цифры введенные в TextBox128 поочередно, т.е. пока не тестировалось на больших числах, да куда уж там, оно и на маленьких не особо...

С клавиатуры мы вводим только p и q, остальные же переменные: N, D, E рассчитываются автоматически при изменении значений p или q.

Visual Basic
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
'Собственно НОД
Private Function NOD(Atmp As Integer, Btmp As Integer) As Integer
    Dim a As Integer, b As Integer
    a = Atmp
    b = Btmp
    Do While a <> 0 And b <> 0
        If a >= b Then a = a Mod b Else b = b Mod a
    Loop
    NOD = (a + b)
    Exit Function
End Function
 
'Возведение больших чисел в большие степени
Private Function ModExp(val As Integer, dd As Integer, nn As Integer) As Integer
    Dim tmpVal As Integer, tmpD As Integer, tmpN As Integer
    Dim remainder As Integer, x As Integer
    tmpVal = val
    tmpD = dd
    tmpN = nn
    x = 1
    
    Do While (tmpD <> 0)
        remainder = tmpD Mod 2
        tmpD = tmpD / 2
        If remainder = 1 Then
            x = (x * tmpVal) Mod tmpN
            tmpVal = (tmpVal * tmpVal) Mod tmpN
        End If
    Loop
    ModExp = x
    Exit Function
End Function
 
'Здесь пересчитываются коэффициенты, все как на сайте [url]http://www.e-nigma.ru/stat/rsa/[/url]
Private Sub TextBox131_Change()
    Dim i As Integer, DB As Integer, count As Integer, rand As Integer
    Dim flag As Boolean
    Dim Arr_Simples() As Integer
    count = 0
    
    If TextBox131.Text <> "" And val(TextBox131.Text) > 1 And TextBox132.Text <> "" And val(TextBox132.Text) > 1 Then
        TextBox133.Text = str(val(TextBox131.Text) * val(TextBox132.Text))
        n = val(TextBox133.Text)
        '--------------------------------------------------------------------
        DB = (val(TextBox131.Text) - 1) * (val(TextBox132.Text) - 1)
 
        For i = 1 To DB
            If NOD(DB, i) = 1 Then count = count + 1
        Next i
            
        ReDim Arr_Simples(count)
            
        count = 0
        For i = 1 To DB
            If NOD(DB, i) = 1 Then
                count = count + 1
                Arr_Simples(count) = i
            End If
        Next i
            
        rand = Int(count * Rnd() + 1)
        If rand > count Then rand = count
        If rand < 1 Then rand = 1
        d = Arr_Simples(rand)
        If d > 0 Then
            TextBox134.Text = str(d)
        Else
            d = 0
            TextBox134.Text = ""
        End If
        '--------------------------------------------------------------------
        If d > 0 Then
            e = 1
            Do While flag = False
                If (e * d) Mod DB = 1 Then flag = True Else e = e + 1
            Loop
            If e > 0 Then TextBox135.Text = val(e) Else TextBox125.Text = ""
        Else
            TextBox135.Text = ""
            e = 0
        End If
    Else
        TextBox133.Text = ""
        TextBox134.Text = ""
        TextBox135.Text = ""
    End If
End Sub
 
'Здесь пересчитываются коэффициенты, все как на сайте [url]http://www.e-nigma.ru/stat/rsa/[/url]
Private Sub TextBox132_Change()
    Dim i As Integer, DB As Integer, count As Integer, rand As Integer
    Dim flag As Boolean
    Dim Arr_Simples() As Integer
    count = 0
    
    If TextBox131.Text <> "" And val(TextBox131.Text) > 1 And TextBox132.Text <> "" And val(TextBox132.Text) > 1 Then
        TextBox133.Text = str(val(TextBox131.Text) * val(TextBox132.Text))
        n = val(TextBox133.Text)
        '--------------------------------------------------------------------
        DB = (val(TextBox131.Text) - 1) * (val(TextBox132.Text) - 1)
 
        For i = 1 To DB
            If NOD(DB, i) = 1 Then count = count + 1
        Next i
            
        ReDim Arr_Simples(count)
            
        count = 0
        For i = 1 To DB
            If NOD(DB, i) = 1 Then
                count = count + 1
                Arr_Simples(count) = i
            End If
        Next i
            
        rand = Int(count * Rnd() + 1)
        If rand > count Then rand = count
        If rand < 1 Then rand = 1
        d = Arr_Simples(rand)
        If d > 0 Then
            TextBox134.Text = str(d)
        Else
            d = 0
            TextBox134.Text = ""
        End If
        '--------------------------------------------------------------------
        If d > 0 Then
            e = 1
            Do While flag = False
                If (e * d) Mod DB = 1 Then flag = True Else e = e + 1
            Loop
            If e > 0 Then TextBox135.Text = val(e) Else TextBox125.Text = ""
        Else
            TextBox135.Text = ""
            e = 0
        End If
    Else
        TextBox133.Text = ""
        TextBox134.Text = ""
        TextBox135.Text = ""
    End If
End Sub
 
'Сама шифровка, вызывает выше описанную функцию
Private Sub CommandButton32_Click()
    Dim i As Integer
    
    TextBox129.Text = ""
    For i = 1 To Len(TextBox128.Text)
        TextBox129.Text = TextBox129.Text & str(ModExp(Int(Mid(TextBox128.Text, i, 1)), d, n))
    Next i
End Sub
 
'Дешифровка, вызывает выше описанную функцию с другими значениями
Private Sub CommandButton33_Click()
    Dim i As Integer, count As Integer
    Dim Arr_SubSting() As String
    
    TextBox130.Text = ""
    For i = 1 To Len(TextBox129.Text)
        If Mid(TextBox129.Text, i, 1) = " " Then count = count + 1
    Next i
    ReDim Arr_SubSting(count)
    Arr_SubSting = Split(TextBox129.Text)
    For i = 1 To count
        TextBox130.Text = TextBox130.Text & str(ModExp(Int(Arr_SubSting(i)), e, n))
    Next i
    'TextBox130.Text = Replace(TextBox130.Text, " ", "")
End Sub
0
Миниатюры
Шифр RSA  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 17:44
Ответы с готовыми решениями:

Простейший Шифр RSA
Срочно нужна помощь для задания в колледже: Нужно создать программу на Delphi...

Составить программу шифрования и расшифровки в Delphi по соответствующему заданию: шифр Атбаш + шифр Цезеря
Составить программу шифрования и расшифровки в Delphi по соответствующему...

Моноалфавитный шифр (шифр Плейфейера)
Доброго времени суток, нужна Ваша помощь! Используя ключевое слово и шифр...

RSA шифрование
Привет Программерам, у меня вопрос есть программа которая шифрует и дешифрует...

Реализация RSA
Доброго времени суток. Необходимо для научной работы реализовать генерацию...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 17:44

rsa шифрование
нашел исходники- http://plagiata.net.ru/?p=140 но не разберусь. как...

Дешифрование RSA
Всем привет В своей задачи шифрование/дешифрование я выполнила шифрование ,...

Шифрование RSA
Имеется 1 публичный ключ и текст. Нужно зашифровать текст по методу RSA ...


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

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

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