(?-?-?-?) RESULT: NaN

Warum geht es nicht..es geht genauso wie vorher :)


Die Abfrage nach dem Wertebereich:
Code:
if((aMail[z] - sKey) < 1)
            {
            aResult[z] = (aMail[z] - sKey) + iCharslength;
            }
       else
            {
            aResult[z] = aMail[z] - sKey;
            }
war überflüssig, da
Code:
if((aMail[z] - sKey) < 1)
immer "false" ist.(aMail[z] - sKey ist immer NaN und daher niemals kleiner als 1)
 
Naja ich denk ma Neurodeamon wollt nicht ne stark vereinfachte Version seines Codes ham sondern wissen wo der Fehler, liegt. Obwohl ers jez wohl wissen dürfte.
EDIT:
Muss halt noch den Char in ASCII-Code umwandeln
 
Da wäre charCodeAt statt charAt. Aber was soll das ' - 96' ? Hat das was mit dem Latin1 Zeichensatz zu tun?
-96 weil ich direkt mit dem ASCII-Code des Zeichens arbeite. Und der ist bei 'a' ist 97. 97 will ich aber nicht, sondern 1.

Aber irgendwie kommt bei Deiner Korrektur aber auch nichts besseres heraus

Ausgabe: hbg, ahm,dhm,r`sy
Nicht? Ich denke schon. Vergleich doch einfach mal:
Code:
ich-bin-ein-satz
hbg,ahm,dhm,r`sy
Bei genauerem Hinsehen fällt auf, dass die Zeichen immer um die gleiche Anzahl Stellen (in diesem Fall -1) verschoben worden sind. Allerdings wie gesagt im darstellbaren ASCII-Bereich und nicht in einem selbstdefinierten Bereich. :rolleyes:

Zur Kontrolle kann man sich ja aus einer ASCII-Tabelle eine Schablone basteln. ;)
 
Original geschrieben von fatalus
Ich hoffe, du beisst jetzt nicht in deine Tastatur :)

Nicht weswegen Du es wohl erwarten würdest. Ich tue sowas nur ungern, aber ich muss mich selbst zitieren:

Wenn ich alle anderen Teile ausgeben lasse, stimmen die einzelnen Ausgaben.
Natürlich läuft das Script nicht zusammen, ich habe es ja auch noch nicht zusammengebaut. Das ist eines meiner ersten Scripts welches ich in JS schreibe.

Ja, ich beisse in die Tastatur, da ich es anscheinend nicht schaffe mich so auszudrücken, das ich verstanden werde :rolleyes:

Bei genauerem Hinsehen fällt auf, dass die Zeichen immer um die gleiche Anzahl Stellen (in diesem Fall -1) verschoben worden sind. Allerdings wie gesagt im darstellbaren ASCII-Bereich und nicht in einem selbstdefinierten Bereich.

Zur Kontrolle kann man sich ja aus einer ASCII-Tabelle eine Schablone basteln.
Ja, ich weiß das es so läuft wie Du es erwartet hast. Aber es lieft nicht so, wie ich es meinte. Also bringt es mir doch nichts. Wo sind meine Taschentücher *uaahhää* *sniff*

Ich bau das ganze nochmal um und frage nochmal nach. Vermutlich liegt es daran, das die Struktur natürlich nicht übersichtlich genug ist.
 
Zuletzt bearbeitet:
Was ich nicht verstehe, ist: Warum machst du den neuen String in ein Array und
joinst diesen dann?

Es ist doch viel einfach, einfach einen zweiten String anzulegen, den ersten dann
in einer Schleife wie bisher durchgehen, und mit charCodeAt den ASCII Wert
herauszusuchen und um x zu erhöhen (wahlweise mit limitierung auf das Alpha-
bet). Danach schreibst du den manipulierten ASCII Wert mit fromCharCode in
den neuen String.

Zu den Fehler im Script:
Z.B. das hier:
Code:
if((aMail[z] - sKey) < 1)
Das sollte deswegen nicht gehen, weil charAt keinen ASCII Wert, sondern wieder
einen Buchstaben zurückliefert.

Auf die Gefahr hin, das zu machen, was du eigentlich vermeiden wolltest, hab
ich auch mal eine Funktion gebaut:
Code:
function caesarCode(a_sInput, a_iChars)
{
    if (a_iChars >= 26) {    // Auf das Alphabet begrenzen
         a_iChars -= 26;
    }

    sRet = new String();
    for (i=0; i<a_sInput.length; i++) {    // String durchlaufen
        iChar = a_sInput.charCodeAt(i);
        if ((iChar >= 65) && (iChar <= 90)) {    // Wenn Großbuchstabe
            iChar += a_iChars;
            if (iChar > 90) {    // Wenn kein Großbuchstaben mehr (!= wenn Kleinbuchstabe)
                iChar = 64 + iChar - 90;
            }
            if (iChar < 65) {    // siehe oben
                iChar = 91 - (65 - iChar);
            }
        } else if ((iChar >= 97) && (iChar <= 122)) {    // Wenn Kleinmbuchstabe
            iChar += a_iChars;                           // Das gleiche wie mit Groß-
            if (iChar > 122) {                           // buchstaben, nur in einem
                iChar = 96 + iChar - 122;                // anderen Zahlenraum
            }
            if (iChar < 97) {
                iChar = 123 - (97 - iChar);
            }
        }
        sRet += String.fromCharCode(iChar);
    }

    return sRet;
}

alert(caesarCode(caesarCode('aBcDeF-GhIjKl', 2), -2));
 
Original geschrieben von Fabian Hofmann
Was ich nicht verstehe, ist: Warum machst du den neuen String in ein Array und
joinst diesen dann?

Es ist doch viel einfach, einfach einen zweiten String anzulegen, den ersten dann
in einer Schleife wie bisher durchgehen, und mit charCodeAt den ASCII Wert
herauszusuchen und um x zu erhöhen (wahlweise mit limitierung auf das Alpha-
bet). Danach schreibst du den manipulierten ASCII Wert mit fromCharCode in
den neuen String.

Zu den Fehler im Script:
Z.B. das hier:
Code:
if((aMail[z] - sKey) < 1)

Das sollte deswegen nicht gehen, weil charAt keinen ASCII Wert, sondern wieder
einen Buchstaben zurückliefert.

Auf die Gefahr hin, das zu machen, was du eigentlich vermeiden wolltest, hab
ich auch mal eine Funktion gebaut:

Nein, ist schon ok. Ich finde den Thread superinteressant!
Die unterschiedlichen Lösungen sind faszinierend. Mir ging es nur darum, das System so einfach (mit Betonung auf "einfach") wie möglich umzusetzen. Dazu gehört kein ASCII zu verwenden. Die Buchstaben spielen ja auch eine nebensächliche Rolle.

Sicherlich habe ich genug Fehler in das Script gesetzt die mir nicht bewußt waren, wie denn auch. Was mich zusätzlich fasziniert sind die selbst geschriebenen Lösungen für fehlende Funktionen, die in PHP selbstverständlich geworden sind.

Letztenendes habe ich irgendwann die Geduld verloren und am Script herumgeschrieben, gelösch, umgeschrieben, etc. und irgendwann die Übersicht verloren. Einzelne Teile funktionierten - aber irgendie habe ich den Code dann komplett verwurschtelt. Es ging ja einmal, aber ich war ja nicht zufrieden... :rolleyes:

Wenn ich jetzt mit ASCII herumspielen würde, würde irgendwann die einfache Lösung (die ich bevorzuge) in eine komplexe Arbeit umspringen. Mit meiner Lösung kann ich in dem "Alphabet-String" ein eigenes Alphabet definieren, die Reihenfolge spielt keine Rolle (z. B. "axzdifepo..." etc) Das wäre mit anderen System nicht so einfach möglich, wenn ich die bisherigen Beiträge richtig verstehe.

Ich setzt mich wie schon geschrieben noch einmal daran und werde mir alle Beiträge zu Gemüte ziehen und die Tipps überdenken und ggf. verwenden.

Danke ;-)
 
Zuletzt bearbeitet:
Cäsar: Teil 2

So, da bin ich wieder und habe noch immer etwas verworrenes zu berichten.

Folgender Code funktioniert mittleweile FAST so, wie ich es erwarten würde:

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html lang="de">
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
	<title>JS-Decryptor</title>
</head>
<script type="text/javascript">
<!--
function str2arr(strInput){
	strArr = new Array();
	for (i = 0; i < strInput.length; i++){
		strArr[i+1] = strInput.charAt(i);
	}
	return strArr;
}

function arrayFind(sSearch, sBase){
    for(var x=0; x<sBase.length; x++){
        if(sBase[x] == sSearch){
        var iIndex = x;
        return iIndex;
        }
    }
}
Array.prototype.find = arrayFind;

function scrInject(sInput, sKey){
	sChars = new String("abcdefghijklmnopqrstuvwxyz-");
	aChars = str2arr(sChars);
	aInput = str2arr(sInput);
	aCharNum = new Array();
	aResult = new Array();
	aResultB = new Array();
	for (var y = 1;y<aInput.length; y++){
		aCharNum[y] = aInput.find(aInput[y],aChars);
	}
	for (var z = 1;z<aCharNum.length;z++){
		if ((aCharNum[z] - sKey) < 1){
			aResult[z] = (aCharNum[z] - sKey) + aChars.length;
		} else {
			aResult[z] = aCharNum[z] - sKey;
		}
	}
	for (var j = 1;j<aResult.length;j++){
		aResultB[j] = aChars[aResult[j]];
	}
	return aResultB;
}
strResult = new String();
strResult = scrInject("pjogipuglpugnlolptzh-e","7").join("");
alert (strResult);
//-->
</script>
<body>
</body>
</html>

In das Script sind Vorschläge/Tipps aus zwei anderen Threads eingeflossen. Danke an alle die etwas dazu beigetragen haben. Wie man sehen kann habe ich natürlich die Hilfe teilweise auch etwas modifizieren müssen.

Bei der ersten Scriptversion habe ich wohl an mangelndem Schlaf gelitten :)
Dieser hier läuft - ich verwende auch alle Scriptteile - allerdings dürfte irgendwo ein Fehler sein den ich - mal wieder - übersehe.

Zeichensatz: "abcdefghijklmnopqrstuvwxyz-"
Satz: "ich-bin-ein-geheimsatz"
Schlüssel: 7
Verschlüsselter Satz: "pjogipuglpugnlolptzh-e"

Hier rufe ich das Script provisorisch auf:
Code:
strResult = new String();
strResult = scrInject("pjogipuglpugnlolptzh-e","7").join("");
alert (strResult);

Der Satz "ich-bin-ein-geheimsatz" wird als "ichbineingeheimsatz" ausgegeben.
was ist mit den "-" passiert?
Ein anderes seltsames Verhalten:
Wenn ich die Anzahl der Zeichen des Zeichensatzes als Schlüssel angebe, müsste ja "AUSGABE == EINGABE" sein, ist es aber nicht :eek: - es ist um ein Zeichen verschoben.

Aber bis hier hin schonmal nicht schlecht für einen JS-Newb wie mich ;-) :)
Jaja, zieht über mein Eigenlob her, aber ich habe sowas nötig, mich lobt ja sonst niemand ;)
 
Zuletzt bearbeitet:
Na..das ist es doch fast:)

Der kleine Bug liegt darin, dass du deine Arrays das eine mal bei 1 zu füllen beginnst, dann aber
wiederum auf Element 0 zugreifst, bzw. das du einen bei 1 gestarteten Array durchläufst, aber zum inkrementieren
benutzt du die Länge eines bei 0 gestarteten Array.... da wird dann das letzte Element abgeschnitten.., das ist das '-'

Fülle deine Arrays in "str2arr()" von 0 an, und durchlaufe sie in "srInject()" von 0 bis zum Ende, dann ist das '-' da.
Wenn du dann noch in "srInject()" dem 'a' eine Chance gibst...
Code:
if ((aCharNum[z] - sKey) < 0)
statt
Code:
if ((aCharNum[z] - sKey) < 1)

ist's perfekt :)
 

Anhänge

  • 231.gif
    231.gif
    46,7 KB · Aufrufe: 127
fatalus, Du bist ein Schatz :) Ich Greenhorn :rolleyes:

Jetzt läuft alles so, wie ich wollte. Danke Euch allen!

eek.gif


Wer jetzt neugierig ist, was ich mit diesem Code vorhabe, der kann ja mal per PN fragen.
 

Neue Beiträge

Zurück