# Übersetzer Javascript -> Java?



## techdevil (23. Mrz 2010)

Hi,

kann mir jemand beim überstetzen dieses Quellcodes helfen?
Bzw. gibt es ein Programm, wass das automatisch für mich tut?


```
function dec2(str){ // decode
var Out='';
pw=str.substring(37,str.length);
for (var i=0; i<pw.length/2; i++)
{
var caracter=pw.substring(i*2,i*2+2);
var sal=str.substring(5+i,6+i);
var claro=parseInt("0x"+caracter)-i-1-((47+parseInt("0x"+sal))%57);
Out=Out+String.fromCharCode(claro);
}
return Out;
}
```

Mein Ansatz:


```
String out="";
String passw = str.substring(37,str.length());
		
for(int i=0;i<passw.length()/2;i++){
			
	String caracter = passw.substring(0,2);
	String sal = str.substring(5,6);
	int claro = Integer.parseInt(caracter,16)-i-1-((47+Integer.parseInt(sal))%57);
	char temp=(char)claro;
	out=out.concat(Character.toString(temp));
			
}
```

Ist das korrekt?


----------



## SlaterB (23. Mrz 2010)

> pw.substring(i*2,i*2+2);
> passw.substring(0,2);
da fällt dir kein Unterschied auf?

wieso hast du einmal Integer.parseInt(,16), das andere Mal ohne die 16?
ansonsten klingts soweit funktionierend, aber testen solltest du es schon


----------



## techdevil (23. Mrz 2010)

Ja, ein paar Flüchtigkeitsfehler, weils schon spät war :gaen:
So sollte es aber richtig sein:


```
String out="";
String passw = str.substring(37,str.length());
		
	for(int i=0;i<passw.length()/2;i++){
			
		String caracter = passw.substring(i*2,i*2+2);
		String sal = str.substring(5+i,6+i);
		int claro = Integer.parseInt(caracter,16)-i-1-((47+Integer.parseInt(sal,16))%57);
		char temp=(char)claro;
		out=out.concat(Character.toString(temp));
			
	}
```

Blöderweise tut es aber immernoch nicht das, was es eigentlich soll.
Das ganze soll ein Algorithmus zum entschlüsseln von encrypted Passwörtern sein.
Der ist nicht von mir, aber den habe ich auf mehreren Seiten im Netz so gefunden.
Beispiel:
str="V99728E7229A0B92D08CD74092DAE99BCA1A3ACA59D7DA29C"
out="hispasec"
So sollte es sein. Ich bekomme aber:
out="tlcBf_"

Da stimmt nicht mal die Länge. 
Das Script von meinem ersten Beitrag (angeblich) ist auf einer Seite auch als Online Application testbar. Dort funktioniert es einwandfrei.

Sieht jemand, warum da was nicht stimmt?


----------



## SlaterB (23. Mrz 2010)

> Ja, ein paar Flüchtigkeitsfehler, weils schon spät war 

ein weiterer ähnlicher ist noch drin, einfach Zeile für Zeile vergleichen,
aber wird dann eher schlechter, kommt dann ein nichtdarstellbares Zeichen raus

die Länge ist ein guter Hinweis, wenn der String 49 Zeichen lang ist, davon 37 weg, durch 2, 
dann kommt ohne groß Fehlermöglichkeiten im Code 6 raus,
wie ein 8-Zeichen-String hispasec entstehen soll, ist mir ein Rätsel,

das Script kannst du wirklich ausführen? vielleicht mit Debug-Ausgaben zu jedem Zeichen und Zwischenwerten einzeln,
ich kann dazu leider nix testen


----------



## techdevil (23. Mrz 2010)

Hey,

ich geb dir hier mal den Link zur Homepage:

SecuriTeam - WS FTP Pro's weak password encryption algorithm
(dort steht ein Link zur Online Application)

Ein anderer Link:
WS_FTP Password Reminder


----------



## SlaterB (23. Mrz 2010)

geht doch, dann verrate ich auch gleich noch deinen anderen Fehler:

```
public class Test {
    public static void main(String[] args)   {
        String str = "PWD=VAE14E12F61EF8FE8DEC0332931D366797167A6AA80A5AA71";
        String out = "";
        System.out.println(str.length());
        System.out.println(str.length() - 37);
        String passw = str.substring(37, str.length());
        System.out.println(passw);
        for (int i = 0; i < passw.length() / 2; i++)
        {
            String caracter = passw.substring(i * 2, i * 2 + 2);
            String sal = str.substring(5 + i, 6 + i);
            int claro = Integer.parseInt(caracter, 16) - i - 1 - ((47 + Integer.parseInt(sal, 16)) % 57);
            char temp = (char)claro;
            System.out.println("t: " + temp + ", " + claro + " --- " + sal + ", " + 
                               Integer.parseInt(sal, 16) + ", " + caracter
                               + ", " + Integer.parseInt(caracter, 16));
            out += temp;
        }
    }
}
```
->

```
53
16
7167A6AA80A5AA71
t: p, 112 --- A, 10, 71, 113
t: a, 97 --- E, 14, 67, 103
t: s, 115 --- 1, 1, A6, 166
t: s, 115 --- 4, 4, AA, 170
t: w, 119 --- E, 14, 80, 128
t: o, 111 --- 1, 1, A5, 165
t: r, 114 --- 2, 2, AA, 170
t: d, 100 --- F, 15, 71, 113
```


----------



## techdevil (23. Mrz 2010)

Boh :autsch: Was für ein blöder Fehler... Da wär ich nie drauf gekommen... Tja wegen sowas verplempert man seine Zeit. Ich danke dir!!!


----------

