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.


Anmelden zum Antworten