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.
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Was macht diese JavaScript Funktion?

Beitragvon Iopodx » Sonntag 2. Dezember 2007, 20:23

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 :)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 3. Dezember 2007, 00:03

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 Modvoice
BlackJack

Beitragvon BlackJack » Montag 3. Dezember 2007, 08:04

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

Beitragvon sma » Montag 3. Dezember 2007, 10:11

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

Beitragvon BlackJack » Montag 3. Dezember 2007, 10:21

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

Beitragvon sma » Montag 3. Dezember 2007, 11:22

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

Beitragvon BlackVivi » Montag 3. Dezember 2007, 11:26

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

Beitragvon sma » Montag 3. Dezember 2007, 13:10

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]