C Funktion --> Java
-
Hi,
Ich habe eine kleine C-Funktion, die mir ein Klartext-Passwort mit einem Handshake verwurschtelt. Die Funktion sieht so aus:
void sendpwd(const char *text){ unsigned int i,j; char encrypted[30]; strcpy(encrypted,text); for(i=0;i<strlen(text);i++){ for (j=0;j<strlen(hs);j++) encrypted[i]^=hs[j]; encrypted[i]^=encrypted[!i?strlen(text)-1:i-1]; if(encrypted[i] < 0x21) encrypted[i]+=128; } printf("%s", encrypted); }
hs ist der Handshake und text is das Passwort im Klartext.
Nun wollte ich diese Funktion einfach in Java nachschreiben. Das sieht dann bei mir so aus:private void encryptPassword(String pass) { char[] encrypted = pass.toCharArray(); char[] handshake = hs.toCharArray(); // hs is ne Instanzvariable for (int i = 0; i < encrypted.length; i++) { for(int j = 0; j < handshake.length; j++) encrypted[i]^=handshake[j]; encrypted[i]^=encrypted[(i == 0) ? encrypted.length -1 : i - 1]; if(encrypted[i] < 0x21) encrypted[i]+=128; } System.out.println(encrypted.toString()); }
Ich bekomme bei meiner JavaVersion komplett andere Ergebnisse. Weiß irgend jemand, warum der Java Code andere Ergebnisse liefert ?
Danke
-
Hmm sicher bin ich mir nicht und ich habe es jetzt auch nicht nachgeprüft.
Ist also nur eine Vermutung:Liegt das vielleicht daran, dass
void sendpwd(const char *text){ char encrypted[30]; strcpy(encrypted,text);
Ein String in ein Chararry kopiert wird
und das letzte Zeichen des Chararrays somit "\0" ist.
Bei String "Hallo" halt encrypted[5] = "\0" und das Array auch 6 Zeichen lang ist.und bei
char[] encrypted = pass.toCharArray();
dieses eben nicht der Fall ist?
Bei String "Hallo" halt encrypted[4] = "o" und das Array auch nur 5 Zeichen lang ist.Wie gesagt, ist jetzt nur eine Vermutung,
kannst dir ja mal die
strlen(xxx) und xxx.length eines "char [] xxx" ausgeben lassen.
-
Das wird nichts bringen da strlen \0 nicht mitzählt.
-
Kann es nicht vielleicht auch daran liegen, dass char in C Bytes sind und in Java Unicode-Zeichen?
-
CengizS schrieb:
Das wird nichts bringen da strlen \0 nicht mitzählt.
Eben, das sag ich ja.
Ist bloss die Frage, ob Java das auch macht?Bashar schrieb:
Kann es nicht vielleicht auch daran liegen, dass char in C Bytes sind und in Java Unicode-Zeichen?
Da könnte auch was dran sein.