Was macht diese JavaScript Funktion?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

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 :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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"")
BlackJack

Bei der Lösung fehlt noch das entfernen aller Zeichen die nicht zu Base64 gehören.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

macht `decode` automatisch... oder?
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Antworten