Moin,
habe gerade das RSA-Verfahren soweit fertig implementiert, aber beim Enkodieren kommt leider nicht das richtig raus.
Hier der Quellcode:
Ich hoffe die obigen Kommentare reichen aus als Beschreibungen. Auf jeden Fall kommt beim Zeichen a ein + raus...
MFG
Aknayirp
habe gerade das RSA-Verfahren soweit fertig implementiert, aber beim Enkodieren kommt leider nicht das richtig raus.
Hier der Quellcode:
Code:
public class RSA {
private double p, q, n, c, e, d;
//2 Primzahlen werden dem Konstruktor übergeben und n und c werden gesetzt
public RSA(double p, double q){
this.p = p;
this.q = q;
this.n = p * q;
this.c = (p-1)*(q-1);
}
//e soll gefunden werden mit der Bedingung ggt(e,c) = 1
//da e irgendein zahl sein kann beginnt ich bei 2 und addiere immer 1 hinzu
public void findE(){
GGT test = new GGT();
double e_lokal = 0;
double h = 1;
while(e_lokal != 1){
h = h+1;
e_lokal = test.teiler(h, c);
}
e = h;
}
//d soll über den erweiterten euklidischen algorithmus gefunden werden und die Implementation habe ich mir
//aus dem Internet geholt. Daher bin ich mir nicht zu 100% sicher, ob das so richtig ist.
public void findd(){
double x = e;
double b = c;
int s,s2,t1,s1,t,t2,temp=1,g,r,y;
s=s2=t1=0;
s1=t=t2=1;
y=(int) b;
while(temp!=0)
{
g=(int)x/y;
r=(int)x%y;
s=s1-g*s2;
t=t1-g*t2;
s1=s2;
s2=s;
t1=t2;
t2=t;
x=y;
y=r;
temp=(int)x%y;
}
if (s<0) s+=b;
d = s;
}
//Ich denke mir das hier eventuell ein Fehler liegt. Da math.pow(w,e) eine sehr große Zahl ist und dadurch
//was falsches rauskommt!?
public double V(char ver){
double w = (double) ver;
return (Math.pow(w, e)%n);
}
//so wie verschlüsselung wird auch entschlüsselung durchgeführt
public char E(double ent){
double w = Math.pow(ent, d)%n;
return ((char) w);
}
public static void main(String args[]){
RSA test = new RSA(7,11);
test.findE();
double ver = test.V('a');
test.findd();
char ent = test.E(ver);
System.out.println("Verschlüsselung = " + ver);
System.out.println("Entschlüsselung = " + ent);
double e = test.gete();
double d = test.getd();
System.out.println("e = " + e);
System.out.println("d = " + d);
}
}
Ich hoffe die obigen Kommentare reichen aus als Beschreibungen. Auf jeden Fall kommt beim Zeichen a ein + raus...
MFG
Aknayirp