Seite 1 von 1

Was macht diese JavaScript Funktion?

Verfasst: Sonntag 2. Dezember 2007, 20:23
von Iopodx
Ich würde gerne diesen "Algorhytmus" in Python nachbauen... Allerdings habe ich keine Ahnung, auch wenn ich gerade dabei bin mich in die JS Referenz einzulesen...

Vielleicht kann mir ja jemand par Denkanstöße liefern...

Code: Alles auswählen

function layerinit(input) { 
	var output = ""; 
	var chr1, chr2, chr3; 
	var enc1, enc2, enc3, enc4; 
	var i = 0; 
	input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 
	do { 
		enc1 = longstring.indexOf(input.charAt(i++)); 
		enc2 = longstring.indexOf(input.charAt(i++));
		enc3 = longstring.indexOf(input.charAt(i++));
		enc4 = longstring.indexOf(input.charAt(i++));
		chr1 = (enc1 << 2) | (enc2 >> 4); 
		chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
		chr3 = ((enc3 & 3) << 6) | enc4; 
		output = output + String.fromCharCode(chr1);
		if (enc3 != 64) { 
			output = output + String.fromCharCode(chr2); 
		}
		if (enc4 != 64) { 
			output = output + String.fromCharCode(chr3); 
		} 
	} 
	while (i < input.length) {
		 return output; 
	}
}
var c = layerinit(crypt);
MfG
Iopodx

Danke!

Edit:// Doh! Base64 - Decode, sollte es sein :)

Verfasst: Montag 3. Dezember 2007, 00:03
von Leonidas
Dann hat es sich gelöst, oder?

Wobei man aber auch zugeben muss, dass es nicht Kompliziert ist, das in Python nachzbauen - Reguläre Ausdrücke gibt es, do-while müsste man ein klein wenig anders schreieben, `str.index()` existiert, `ord()`/`chr()` ebenso.

Verfasst: Montag 3. Dezember 2007, 08:04
von BlackJack
Was mich an dem Quelltext sehr verwirrt sind die geschweiften Klammern nach dem ``while`` um das ``return``!? Das lässt einen irgendwie vermuten es wäre eine ``while``-Schleife wenn man das ``do`` übersieht.

Verfasst: Montag 3. Dezember 2007, 10:11
von sma
Was macht der Code: Ohne näheres ausprobieren tippe ich auf eine ungeschickt programmierte base64-Dekodierung. Allerdings fehlt "longstring", um das wirklich feststellen zu können.

Die Klammern um das "return output", die BlackJack verwirrten, ist einfach nur überflüssig, schaden aber nicht.

In Python nachbauen kann man dies so :)

Code: Alles auswählen

def layerinit(input):
  return input.decode("base64"")

Verfasst: Montag 3. Dezember 2007, 10:21
von BlackJack
Bei der Lösung fehlt noch das entfernen aller Zeichen die nicht zu Base64 gehören.

Verfasst: Montag 3. Dezember 2007, 11:22
von sma
macht `decode` automatisch... oder?

Verfasst: Montag 3. Dezember 2007, 11:26
von BlackVivi
sma hat geschrieben:macht `decode` automatisch... oder?
Imho nicht. Außerdem überschreibst du das Schlüsselwort Input...

Ich weiß, es ist nur ein Beispiel. Aber irgendjemand kopiert sich das und schon haben wir den Salat.

Verfasst: Montag 3. Dezember 2007, 13:10
von sma
Vor dem posten habe ich extra ausprobiert, dass dies hier macht, was es soll:

Code: Alles auswählen

" ()&  AAAA$$$  ".decode("base64")
Und da `input` nur eine globale Variable und kein Schlüsselwort ist, ist mir das Überschreiben innerhalb der Funktion relativ egal. Einfach kopieren kann das jemand schon daher nicht, da ich ein " zu viel benutzt habe ;)

Stefan