Avatar billede gulbaek Nybegynder
29. januar 2004 - 15:23 Der er 7 kommentarer og
1 løsning

Euclids udvidede algoritme & Rsa

Nogen som kan hjælpe mig med at implementere Euclids udvidede algoritme.

Skal nemlig have beregnet d = e^-1 (mod ø(n))
Hvilket er min hemmelige nøgle i min implementering af RSA
Avatar billede sekhmet_ds Nybegynder
29. januar 2004 - 17:42 #1
Nu ved jeg ikke noget den pågældende algoritme, så det her er måske et lidt dumt spr., men er ø(n) en bestemt funktion eller bare noget du selv bestemmer? Og hvis det er en bestemt funktion hvad er så formlen for den?
Avatar billede soreno Praktikant
29. januar 2004 - 17:47 #2
Jeg lavede for noget tid siden dette i Java:

    private void calculateD()
    {
        double res;
        for (int i = 1; i < m; i++)
        {
            res = ((i * m) + 1) / e;

            //hvis res er et heltal
            if (res % 1 == 0)
            {
                d = (long) res;
                return;
            }
        }
    }

hvor
        m = (p - 1) * (q - 1);

og
        p og q er de 2 primtal.

Jeg blev aldrig færdig med hele algoritmen, så koden er ikke testet særligt meget. For små værdier af p og q (<100) giver den korrekt resultat.. :-)
Avatar billede gulbaek Nybegynder
29. januar 2004 - 20:06 #3
soreno, har lige skrevet lidt om på koden, men det ser ud som om den regner lidt forkert.

private int calculateD(int e, int ø)
        {
            int d;
            double res;
            for (int i = 1; i < ø; i++)
            {
                res = ((i * ø) + 1) / e;

                //hvis res er et heltal
                if (res % 1 == 0)
                {
                    d = (int)res;
                    return d;
                }
                return 0;
            }
                return 0;

        }

Jeg forsøgte med e = 3 og ø = 460 og det giver 153 men det skulle gerne give - 153
Men okay det er selvfølgelig tæt på
Avatar billede soreno Praktikant
29. januar 2004 - 20:17 #4
Hvad er dine p og q (som er primtal) ?
Avatar billede gulbaek Nybegynder
29. januar 2004 - 20:23 #5
jeg ved det faktisk ikk, har bare fundet et eksempel

eg: want to find Inverse(3,460):



i          y          g          u          v         
0          -          460        1          0         
1          -          3          0          1         
2          153        1          1          -153     
3          3          0          -3        460       



    hence Inverse(3,460) = -153 = 307 mod 460

http://williamstallings.com/Extras/Security-Notes/lectures/publickey.html
Avatar billede soreno Praktikant
29. januar 2004 - 20:35 #6
Ok, så prøv dette:

    private void calculateD()
    {
        for (int i = 1; i <= (m - 1); i++)
        {
            if (((e * i) % m) == 1)
            {
                d = i;
            }
            else
            {
                continue;
            }
        }
    }
Avatar billede gulbaek Nybegynder
23. marts 2004 - 23:42 #7
soreno gider du komme med et svar, så jeg kan få lukket spørgsmålet og tusind tak for hjælpen
Avatar billede soreno Praktikant
24. marts 2004 - 10:26 #8
Ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester