Avatar billede repsak Nybegynder
08. juli 2003 - 16:53 Der er 10 kommentarer og
1 løsning

Fejl med RSA

Hej, jeg er blevet godt forvirret over denne fejl. Sidder med en bog som siger at
m=6 (=41^77  mod 221)

men jeg får det altså til
m=2 (=41^77  mod 221)

jeg ønsker samme resultat som bogen, men kan altså ikke finde fejlen...

Java:
System.out.println((Math.pow(41,77)%221));
er dette ikke korrekt?
Avatar billede jpvj Nybegynder
08. juli 2003 - 17:11 #1
Du kan ikke have 41^77 gemt i en float. Du skal bruge BigInteger:

import java.math.BigInteger;

public class main {

public static void main(String[] args) {
  BigInteger a,c;
  a = new BigInteger("41");
  int b = 77;
  c = new BigInteger("221");

  System.out.println((a.pow(b)).mod(c));
}


}
Avatar billede jpvj Nybegynder
08. juli 2003 - 17:11 #2
(Math.pow returnerer en float)
Avatar billede repsak Nybegynder
08. juli 2003 - 17:17 #3
javadoc:
static double pow(double a, double b)

jeg arbejder med double - burde det ikke være ok?
Avatar billede repsak Nybegynder
08. juli 2003 - 20:39 #4
hmm når jeg indtaster regnestykket på windows' lommeregner så får jeg det rigtige resultat. Tror ikke at spørgsmålet hører hjemme her alligevel. Det er mig som tosser rundt i Javas måde at beregne på :-)
Avatar billede jpvj Nybegynder
09. juli 2003 - 13:06 #5
repsak> Hvis ikke mit svar er forkert, så skal du ikke tage points selv. Det er ikke velset her på E.

Hvis du mener at det kan laves uden brug af BigInteger, så synes jeg at du skal vise koden, så andre kan få glæde af den.
Avatar billede repsak Nybegynder
09. juli 2003 - 13:19 #6
oki here goes (er ikke min kode, men den spiller maks - også hvis man benytter andre sprog):

private int Powmod(int a, int b, int c) {
    if(b > 3) {
        return ((Powmod(a, b/2, c) * Powmod(a, b- b/2, c)) % c);
    }
    else {
        return (int)(Math.Pow(a, b) % c);
    }
}
Iøvrigt er jeg ked af hvis jeg har fornærmet dig - det var ikke meningen. For min skyld må du da godt få de point - jeg samler ikke på dem, så sig lige til.
Avatar billede jpvj Nybegynder
09. juli 2003 - 15:59 #7
Hvordan tror du selv den performer??! Rekursive kald er absolut ikke hurtige, men ok - hvis det blot er til test...

Den kan i øvrigt laves meget pænere og hurtigere med (java pseudo kode)

function Powmod(int a, int b, int c) {
int res=1;
for (int i=1; i<b; i++) {
  res = res * (a*a) % c
}
return res;
}

JP
Avatar billede jpvj Nybegynder
09. juli 2003 - 16:00 #8
Damn... fejl

function Powmod(int a, int b, int c) {
int res=1;
for (int i=1; i<b; i++) {
  res = (res*a) % c;
}
return res;
}
Avatar billede repsak Nybegynder
09. juli 2003 - 16:09 #9
Ville du have de points?
Avatar billede jpvj Nybegynder
10. juli 2003 - 11:41 #10
Behold du dem bare... jeg får et større kick ud af at løse problemer, end at se hvor mange points jeg har...
Avatar billede repsak Nybegynder
10. juli 2003 - 14:05 #11
hehe - det er også mit synspunkt. Undskyld misforståelsen :-)
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