Kann mir Jemand diese Funktion erklären?
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
algorithmus
ausgabe
code
codierten string
erkennen
frage
funktion
input
jemand
lesbaren code
null
string
text
url
variable code
vorkommen
wissen
zeichen
-
Hallo Zusammen,
Ich habe mal eine Frage bezüglich einer Javascript Funktion. Ich würde gerne wissen, was genau dort steht und was es bewirkt. Weiß Jemand wofür diese Funktion verwendet wird?
function r(g){var k={},a,l= 0,d,c=0,b,e="",f=String.fromCharCode,h=g.length;for(a=0;64>a;a++)k["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(a)]=a;for(d=0;d<h;d++)for(a=k[g.charAt(d)],l=(l<<6)+a,c+=6;8<=c;)((b=l>>>(c-=8)&255)||d<h-2)&&(e+=f(b));return e} s=r("TT18WlV5TXVeLXFXYn1WTF5qSmR9TXYpOHklYlFXWGY+SUZCRGNKPiU0emcyQ2l8dGVsamBkVlpA"); function processRecording(g){if(null===g||"string"!==typeof g||2>g.length||0!==g.indexOf("e:"))return g;for(var k=r(g.substring(2)),a=[],h=0,d,c="",b=0;256>b;b++)a[b]=b;for(b=0;256>b;b++)h=(h+a[b]+s.charCodeAt(b%s.length))%256,d=a[b],a[b]=a[h],a[h]=d;for(var e=h=b=0;e<k.length;e++)b=(b+1)%256,h=(h+a[b])%256,d=a[b],a[b]=a[h],a[h]=d,c+=String.fromCharCode(k.charCodeAt(e)^a[(a[b]+a[h])%256]);0!==c.indexOf("http")&& smuleError("Failed to decode URL "+g+"; got "+c);return c;}
LG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Zur ersten Funktion http://wiki.selfhtml.org/wiki/JavaScript/Objekte/String/fromCharCode
Und mit der zweiten soll wohl eine URL überprüft werden, bzw. entsprechend der API umcodiert werden. -
Du kannst dir das mal schön formatiert ansehen, also z.B. so:
function b64(g) { var k={}, a, l = 0, d, c = 0, b, e = "", f = String.fromCharCode, h = g.length; for(a = 0; 64 > a; a++) k["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(a)] = a; for(d = 0; d < h; d++) for(a = k[g.charAt(d)] ,l = (l << 6) + a, c += 6; 8 <= c;) ((b = l >>> (c -= 8) & 255) || d < h - 2) && (e += f(b)); return e } key = b64("TT18WlV5TXVeLXFXYn1WTF5qSmR9TXYpOHklYlFXWGY+SUZCRGNKPiU0emcyQ2l8dGVsamBkVlpA"); function processRecording(g) { if(g === null || typeof g !== "string" || g.length < 2 || g.indexOf("e:") !== 0) return g; var raw = b64(g.substring(2)); var a = []; var ptr = 0; var tmp; var result = ""; var counter = 0; // initialize key table for(var i = 0; i < 256; i++) a[i] = i; // apply key for(var i = 0; i < 256; i++) { ptr = (ptr + a[i] + key.charCodeAt(i % key.length)) % 256; tmp = a[i]; a[i] = a[ptr]; a[ptr] = tmp; } ptr = 0; // decrypt input for(var i = 0; i < raw.length; i++) { counter = (counter + 1) % 256; ptr = (ptr + a[counter]) % 256; tmp = a[counter]; a[counter] = a[ptr]; a[ptr] = tmp; result += String.fromCharCode(raw.charCodeAt(i) ^ a[(a[counter] + a[ptr]) % 256]); } return result; }
Wie unschwer zu erkennen ist, decodiert die Funktion
(ursprünglich:b64
) einen Base64-codierten String. Die Variabler
(ursprünglich:key
) enthält dabei einen Schlüssel, der später für die Entschlüsselung benutzt wird.s
entschlüsselt einen String, allerdings war ich zu faul herauszufinden welcher Algorithmus da benutzt wird. Da in dem String durchaus auch Zeichen vorkommen können, die keine Text-Zeichen sind, liegt er als Base64 vor. Die Ausgabe wird dann noch geprüft, ob sie auch wirklich eine URL ist, das habe ich im »lesbaren« Code ausgelassen.processRecording
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage