Ik heb geprobeerd het RSA-algoritme te scripten in PHP, ik heb nu al heel lang aan het script aan zitten kijken, maar het probleem is dus dat de codeer en decodeer functies niet lijken te werken...of zit er een fout in de keuze van sleutels etc.?
Ik kom er niet uit.
Ik kom er niet uit.
PHP:
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
| <? print" <form method=post> String om te verzenden (<font color=blue>max 20 karakters</font>): <input type=text name=string><br><br> <input type=submit name=submit value=Voer in> </form>"; /* "Vertaal" de string naar ASCII-codes en plaats die in een tabel */ if ($submit) { $lengte_string = strlen($string); echo "Deze string bestaat uit $lengte_string karakters"; print "<br><br><table id=tabel>"; for ($i = 0; $i < $lengte_string; $i++) { $letter = $string[$i]; $ascii = ord($letter); print "<tr> <td width='30'>$string[$i]</td> <td width='80'> is in ASCII :</td> <td> $ascii</td> </tr>"; } print "</table>"; } print " <form method=post> 2 verschillende priemgetallen (kies voor kleinere priemgetallen (onder de 30 liefst)): <br> <input type=text name=p> <br> <input type=text name=q><br><br> <input type=hidden name=string value=$string> <input type=submit name=submit2 value=Voer in> </form>"; if ($submit2) { if ($p%2 != 0 && $q%2 != 0 && $p < 50 && $q < 50) /* mietige controle of p en q is priemgetal */ { $n = $p * $q; /* berekening n */ print "<b><u>Berekening van n</u></b><br><br> n = p * q <br>$p * $q = $n<br><br><br>"; $a = ($p-1) * ($q-1); /* berekening a */ $p_min = $p-1; $q_min = $q-1; print "<b><u>Berekening van a</u></b><br><br> a = (p-1) * (q-1) <br>$p_min * $q_min = $a<br><br><br>"; print "<b><u>Berekening van e</u></b><br><br>"; /* berekening $e, <$n, !=$a en relatief briem aan $a */ print "Mogelijke waarden voor e zijn:<br><br>"; for ( $i = 2; $i < $n; $i++ ) {for ( $j = 2; $j < $n; $j++ ) {if ( $j <= $i and $a != $i ) {if ( $a%$j == 0 && $i%$j == 0) {$num_del[$i] = $i;} } } } $num_all = range(0,$n-1); $num_rest = array_diff ($num_all, $num_del); unset ($num_rest[0]); unset ($num_rest[1]); unset ($num_rest[$a]); for ($x = 2; $x <= max($num_rest); $x++) { if ( IsSet($num_rest[$x]) ) {print "$num_rest[$x]<br>";} } print("<br>e is nu:</b><br> - kleiner dan n<br> - verschillend van a<br> - relatief priem aan a<br>"); $e = max($num_rest); print "<br>Voor e kiezen we e: $e<br><br><br>"; print "<b><u>Berekening van d</u></b><br><br>"; /* berekening d */ print "d moet voldoen aan: (e * d )-1)) mod a = 0<br>een mogelijke waarde voor d is: "; for ( $d=0;; $d++ ) { if ((($d*$e)-1)%$a == 0 && (($d*$e)-1) != 0) { print "$d<br><br><br>"; break;} } print "<form method=post> <input type=hidden name=string value=$string> <input type=hidden name=n value=$n> <input type=hidden name=d value=$d> <input type=hidden name=e value=$e> <input type=submit name=submit3 value=codeer> </form>"; } else { print "Priemgetallen te groot of dit is helemaal geen priemgetal, neem een andere waarde"; } } if ($submit3) { print "Nu gaan we dus het bericht <b>$string</b> coderen met de volgende sleutels:<br> - n is $n<br> - d is $d<br> - e is $e<br>"; print "<br><br>We coderen nu elke ASCII code apart door middel van het volgende algoritme<br><br> <b>c = m^e mod n</b>"; $lengte_string = strlen($string); /* codeer bericht en plaats in tabel */ print "<br><br><table id=tabel>"; for ($i = 0; $i < $lengte_string; $i++) { $letter = $string[$i]; $ascii = ord($letter); $gecodeerd = (bcpow($ascii,$e))%n; print "<tr> <td width='30'>$string[$i]</td> <td width='80'> is in ASCII :</td> <td width='30'> $ascii </td> <td width='80'> gecodeerd:</td> <td> $gecodeerd </td> </tr>"; } print "</table>"; print "<form method=post> <input type=hidden name=string value=$string> <input type=hidden name=n value=$n> <input type=hidden name=d value=$d> <input type=hidden name=e value=$e> <input type=submit name=submit4 value=verstuur> </form>"; } if ($submit4) { print "Nu hebben we de cyphertext verstuurd, met de d-sleutel <b>$d</b> kan de ontvanger het bericht decoderen.<br> Dit gaat met de formule:<br><br> <b>m = c^d mod n</b><br><br>"; $lengte_string = strlen($string); /* decodeer bericht en plaats in tabel */ print "<br><br><table id=tabel>"; for ($i = 0; $i < $lengte_string; $i++) { $letter = $string[$i]; $ascii = ord($letter); $gecodeerd = (bcpow($ascii,$e))%n; $gedecodeerd = (bcpow($gecodeerd,$d))%n; print "<tr> <td width='30'>$string[$i]</td> <td width='80'>is in ASCII :</td> <td width='30'>$ascii </td> <td width='80'>gecodeerd:</td> <td width='30'>$gecodeerd </td> <td width='80'>gedecodeerd:</td> <td width='80'>$gedecodeerd </td> </tr>"; } print "</table>"; } ?> ?> |