[c++] RSA getallen berekenen

Pagina: 1
Acties:

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 14-08 15:59
Ben bezig met m'n profielwerkstuk (HAVO 5). Hier hebben we als onderwerp priemgetallen gekozen en daaraan als soort van afgeleide cryptografie bij gekozen. Mooi artikel op t.net van gebruikt. Nou heb ik de source van Mark Timmer kunnen gebruiken en ik was bezig deze te 'porten' naar c++. Maar het getal wil hij niet uitrekenen.
Nou is dit de eerste keer dat ik 'echt' prog in C++ dus of het allemaal kan wat ik doe weet ik niet. Eerst de code van Mark (in (Q?)Basic):
QBasic:
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
Aanmaakpubliek:

n# = p# * q#
a# = (p# - 1) * (q# - 1)

COLOR 31: LOCATE 16, 1: PRINT "Bij n hoort de waarde"; n#

IF e# <> 0 THEN mine = e ELSE mine = INT(.5 * n#)

FOR e# = mine TO (n# - 1)
  IF e# > (a# - 1) THEN
    FOR controle = 2 TO INT(.5 * a#)
      IF INT(e# / controle) = (e# / controle) THEN
        IF INT(a# / controle) = (a# / controle) THEN nietrelatief = 1
      END IF
    NEXT
    IF nietrelatief = 0 THEN EXIT FOR
  END IF
 
 IF e# < a# THEN
    FOR controle = 2 TO INT(.5 * e#)
      IF INT(e# / controle) = (e# / controle) THEN
        IF INT(a# / controle) = (a# / controle) THEN nietrelatief = 1
      END IF
    NEXT
    IF nietrelatief = 0 THEN EXIT FOR
  END IF
  nietrelatief = 0
NEXT

IF nietrelatief = 1 THEN mine = 2: GOTO Aanmaakpubliek
COLOR 31: LOCATE 17, 1: PRINT "Bij e hoort de waarde"; e#


En dan hier het stukje C++ code wat ik dus zelf gebruik:

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
void calc_e(int p, int q) {
    int a, n, e = 0,
        mine, check, relprime;
void calc_e(int p, int q) {
    int a, n, e = 0,
        mine, check, relprime;
    do {
        n = p * q;
        cout << " Waarde voor n: " << n << endl;
        a = (p - 1) * (q - 1);
        cout << "Waarde voor a: " << a << endl;
        if (e != 0) {
            mine = e;
        } else {
            mine = int(n / 2);
        }
        for (e = mine; e < (n - 1); e++) {
            if (e > (a - 1)) {
                for (check = 2; check < int(a / 2); check++) {
                    if (int(e / check) == (e / check)) {
                        if (int(a / check) == (a / check)) {
                            relprime = 1;
                        }
                    }
                }
                if (relprime == 0) {
                    break;
                }
            }
            check = 0;

            if (e < a) {
                for (check = 2; check < int(e / 2); check++) {
                    if (int(e / check) == (e / check)) {
                        if (int(a / check) == (a / check)) {
                            relprime = 1;
                        }
                    }
                }
                if (relprime == 0) {
                    break;
                }
            }
            relprime = 0;
        }
    } while (relprime == 1);
    cout << " Waarde voor e: " << e << endl;
}
Hierin zijn p en q priemgetallen die _niet_ gelijk aan elkaar zijn. Bij e hoort er dus 113 uit te komen, maar er komt 220 uit. Werkt goto soms in C++ niet zo als in Basic?

[ Voor 18% gewijzigd door zeroxcool op 17-02-2003 18:42 ]

zeroxcool.net - curity.eu


  • Avalanchez
  • Registratie: Juni 2002
  • Laatst online: 25-06-2012

Avalanchez

Phr34k

c++ ondersteunt wel goto... maar dat is niet 'netjes'. gebruik een for, eventueel whileloop...
met goto's krijg je moeilijk te lezen 'spaghetticode'...

Computers are stupid, they can only give you answers. -Picasso


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 14-08 15:59
Dat heb ik al in meerdere topics gelezen ja. Is in geen een taal netjes, klopt. Maar is de manier waarop ik het in C gebruik wel hetzelfde als Mark die gebruikte in Basic?

zeroxcool.net - curity.eu


  • Marcj
  • Registratie: November 2000
  • Laatst online: 17:51
1) Die goto zou ik vervangen door een while-lusje
2) int(e / check) == (e / check) werkt niet op dezelfde manier als BASIC. Ik zou Math.h even includen en dan iets doen als: ((double)e/(double)check) == round((double)e/(double)check).

Misschien even zoeken voor de goede functie, mijn C++ is alweer van een jaartje terug :P
In java is het iets als Math.floor((double)e/(double)check).

[ Voor 11% gewijzigd door Marcj op 17-02-2003 18:36 ]


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 14-08 15:59
Zo heb die goto dus even veranderd naar while loop. Ik zal eens even zoeken naar die functie. Maar ik als ik jouw punt een beetje snap bedoel je dus dat ik van a, n en e doubles moet maken?

edit:
zie voor aanpassingen gewoon 1e post

[ Voor 13% gewijzigd door zeroxcool op 17-02-2003 18:43 ]

zeroxcool.net - curity.eu


  • Marcj
  • Registratie: November 2000
  • Laatst online: 17:51
ZeRoXcOoL schreef op 17 February 2003 @ 18:43:
Zo heb die goto dus even veranderd naar while loop. Ik zal eens even zoeken naar die functie. Maar ik als ik jouw punt een beetje snap bedoel je dus dat ik van a, n en e doubles moet maken?

edit:
zie voor aanpassingen gewoon 1e post
Als je twee integers op elkaar deelt krijg je automatisch een integer terug, een al afgerond getal dus. Je moet ze eerst naar een double conveteren (één van beide zou dacht ik ook moeten werken). Maar dan heb je nog wel ff een functie nodig om die double af te ronden :)

edit: Goed aangepast, maar waar is nu de mine = 2???

[ Voor 5% gewijzigd door Marcj op 17-02-2003 18:47 ]


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 14-08 15:59
Klopt ja stom, ik zal voor die functie eens even verder zoeken (toch vergeet je dingen uit dat welbekende maffe boek van Gertjan Laan :D).

zeroxcool.net - curity.eu


  • Marcj
  • Registratie: November 2000
  • Laatst online: 17:51
ZeRoXcOoL schreef op 17 February 2003 @ 18:47:
Klopt ja stom, ik zal voor die functie eens even verder zoeken (toch vergeet je dingen uit dat welbekende maffe boek van Gertjan Laan :D).
Boek? http://msdn.microsoft.com :P (of nu http://java.sun.com/j2se/1.4.1/docs/api/ voor java :D)

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 14-08 15:59
Woei, het werkt nu, stomme fout, maar zeker wel bedankt! En ja, het klopt zelf vanaf het inet leren lukt net zo goed, PHP kennis vloeit daar uit voort. Had dat boek even geleend bij vriend van me. Maar goed, bedankt!

zeroxcool.net - curity.eu

Pagina: 1