Jo moin leuz .... ich wollt mir grad ne eigene RSA Verschlüsselungsklasse schreiben, aber irgendwas haut da nicht hin.
Also hier mein Primzahltest:
Zum finden des ggT nutze ich den erweiterten euklid:
Das berechnen der Schlüssel:
p und q können nach belieben an den konstruktor übergeben werden, der testet dann obs primzahlen sind, oder man nutzt den standard konstruktor der sich zufalls primzahlen erstellt.
Das Verschlüsseln/Entschlüsseln in vereinfachter Form, d.h. ich geb nur einen Integer über der verschlüsselt werden soll. Sollte ja zu Testzwecken genügen bevor ich anfange nen String zu zerlegen.
Naja nun meine Frage ... wo ist der Fehler, denn das funzt so nicht.
Beispiel Ausgabe:
Also hier mein Primzahltest:
Code:
private boolean isPrim(int x){
boolean isP = true;
double p = Math.pow(2, (x - 1)) % x;
if (p==1){
isP = true;
}
else{
isP = false;
}
return isP;
}
Zum finden des ggT nutze ich den erweiterten euklid:
Code:
private int ggT(int a, int b){
if (a==b||b==0){
return a;
}
else {
return ggT(b,a%b);
}
}
Das berechnen der Schlüssel:
Code:
private void init(){
n = p * q;
phi = (p-1)*(q-1);
e = 50;
while (ggT(e , phi) != 1){
e++;
}
int x = 1;
while(true){
int de = (x * e) - 1;
if ((de % phi) == 0){
break;
}
x++;
}
d = x;
}
p und q können nach belieben an den konstruktor übergeben werden, der testet dann obs primzahlen sind, oder man nutzt den standard konstruktor der sich zufalls primzahlen erstellt.
Das Verschlüsseln/Entschlüsseln in vereinfachter Form, d.h. ich geb nur einen Integer über der verschlüsselt werden soll. Sollte ja zu Testzwecken genügen bevor ich anfange nen String zu zerlegen.
Code:
private int encode(int text){
return (int)(Math.pow(text, e)%n);
}
private int decode(int text){
return (int)(Math.pow(text, d)%n);
}
Naja nun meine Frage ... wo ist der Fehler, denn das funzt so nicht.
Beispiel Ausgabe:
Code:
p = 79
q = 43
n = 3397
phi = 3276
e = 53
d = 989
Ausgang: 123
Codiert: 2714
Decodiert: 0