Ik ben bezig met een programmaatje in VB om tekst te coderen (en te encoderen) mbv het rsa algoritme.
Het is voor mijn profielwerkstuk en ik ben tot het volgende gekomen
toelichting:
de eerste functie zet de string van tekstvak 1 om in ascii-code en zet alles in een array
de tweede functie berekent mod van m^e en n
voor lagere waardes van e gaat het codeerproces vrij snel, maar zogauw er grotere waardes voor e worden ingevoerd (waardoor m^e dus ontzettend groot wordt) gaat het echt verschrikkelijk langzaam.
Dat komt dus door de functie doublemod (die heb ik gekregen van Xenophage). Als ik gewoon m^e mod n deed kreeg ik een overflow, maar met die functie gaat het wel goed, alleen niet zo heel erg snel.
Wie kan mij vertellen wat ik hier aan kan doen om het sneller te laten werken?
Het is voor mijn profielwerkstuk en ik ben tot het volgende gekomen
code:
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
| Private Function ToAscii(strInput As String) As Integer()
Dim i As Long, arrOut() As Integer
ReDim arrOut(Len(strInput) - 1)
For i = 1 To Len(strInput)
'Zet elk chacter om
arrOut(i - 1) = Asc(Mid(strInput, i, 1))
Next
ToAscii = arrOut
End Function
Function DoubleMod(ByVal c As Double, n As Integer) As Double
'coded by Xenophage
Dim aa As Integer, bb As Integer
Do While c > n
If c > (100 * n) Then c = c - (100 * n)
If c > (10 * n) Then c = c - (10 * n)
If c > n Then c = c - n
DoEvents
Loop
DoubleMod = c
End Function
Private Sub Command1_Click()
Dim p As Integer, q As Integer, n As Integer, a As Integer
Dim e As Integer, d As Integer, c As Double, m As Integer
Dim c1 As Integer, strOutput As String, arrGait() As Integer
'alle waardes voor het RSA algoritme worden vastgelegd
p = 13
q = 17
n = p * q
a = (p - 1) * (q - 1)
e = 5
d = 77
'de benodigde velden worden geleegd
List1.Clear
Text2.Text = ""
'arrGait wordt gevuld met ascii codes van de letters van tekstvak 1
arrGait = ToAscii(Text1.Text)
'tekst 1 wordt gecodeerd
For i = 0 To Len(Text1.Text) - 1
'Label1.Caption = "letter: " & List3.List(i) 'hoort er nog niet bij
m = arrGait(i)
c = m ^ e
c1 = DoubleMod(c, n) 'de ciphertext wordt berekend
List1.AddItem (c1)
Text2.Text = Text2.Text & Chr$(List1.List(i)) 'de gecodeerde ascii codes worden omgezet en in het tekstvak gezet
Next i
End Sub |
toelichting:
de eerste functie zet de string van tekstvak 1 om in ascii-code en zet alles in een array
de tweede functie berekent mod van m^e en n
voor lagere waardes van e gaat het codeerproces vrij snel, maar zogauw er grotere waardes voor e worden ingevoerd (waardoor m^e dus ontzettend groot wordt) gaat het echt verschrikkelijk langzaam.
Dat komt dus door de functie doublemod (die heb ik gekregen van Xenophage). Als ik gewoon m^e mod n deed kreeg ik een overflow, maar met die functie gaat het wel goed, alleen niet zo heel erg snel.
Wie kan mij vertellen wat ik hier aan kan doen om het sneller te laten werken?
Women, you can't live with 'em..... and you can't live with 'em!
Als je hoort hoe het klokje thuis tikt, zit je niet in het café.