Eric S: Rot47 Verschlüsselung und Umlaute

function rot(x)  
{  
  var s = [];  
  for (var i = 0; i < x.length; i ++)  
  {  
    var j = x.charCodeAt(i);  
    if ((j >= 33) && (j <= 126))  
    {  
      s[i] = String.fromCharCode(33 + ((j + 14) % 94));  
    }  
    else  
    {  
      s[i] = String.fromCharCode(j);  
    }  
  }  
  return s.join('');  
}  

Mit dieser Funktion möchte ich einen Text "verschlüsseln" sofern man es verschlüsseln nennen kann, der Text soll nur nicht lesbar sein, Rot47 reicht da =)

Aber wenn ich Umlaute einbaue und sie mit Alert oder Console.log ausgebe, kommen da nur seltsame Zeichen raus, wie umgehe ich das? o_O Irgendwie muss ich doch auch Umlaute ver/entschlüsseln können.

Danke für Antworten =)

  1. hi,

    Aber wenn ich Umlaute einbaue und sie mit Alert oder Console.log ausgebe, kommen da nur seltsame Zeichen raus, wie umgehe ich das? o_O Irgendwie muss ich doch auch Umlaute ver/entschlüsseln können.

    In der ASCII-Tabelle gibt es keine Umlaute und was machst Du: Du reichst die unverändert durch.

    1. In der ASCII-Tabelle gibt es keine Umlaute und was machst Du: Du reichst die unverändert durch.

      Nr 196 in der Tabelle ist zb ein Ä - Die Funktion geht aber nur bis 127 und ja der sollte es dann unverändert weiter geben aber er verändert es mir in irgend ein komisches Zeichen.

      1. Om nah hoo pez nyeetz, Eric S!

        In der ASCII-Tabelle gibt es keine Umlaute und was machst Du: Du reichst die unverändert durch.

        Nr 196 in der Tabelle ist zb ein Ä - Die Funktion geht aber nur bis 127.

        ASCII ist eine 7-bit-Kodierung.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Kalif und Kalifornien.

      2. Hi,

        In der ASCII-Tabelle gibt es keine Umlaute und was machst Du: Du reichst die unverändert durch.

        stimmt - na und? Eric hat nirgends von ASCII gesprochen. Wir gehen also vom kompletten Unicode-Zeichensatz aus.

        Nr 196 in der Tabelle ist zb ein Ä

        Stimmt.

        Die Funktion geht aber nur bis 127 und ja der sollte es dann unverändert weiter geben

        Ja, aber genau da liegt ein Problem. Du lässt Codes 0x00..0x20 sowie ab 0x80 aufwärts unverändert, und bildest den Bereich 0x21..0x7F mit einer zusätzlichen Rotation um 14 Positionen auf 0x42..0x9F ab. Damit ist schon mal Bedingung, dass Zeichencodes im Bereich 0x80..0x9F nicht vorkommen.
        Und dann? Wie sieht die Rück-Umwandlung aus? Sicher nicht so, dass du dieselbe Funktion nochmal anwendest. Das ergibt Doppel-Murks.

        aber er verändert es mir in irgend ein komisches Zeichen.

        Das beschreibe bitte mal genauer. Vor allem:
         * welchen Eingabe-String verwendest du (Beispiel)
         * Welches Ergebnis erhältst du damit (Beispiel)
         * Mit welcher Funktion codierst du zurück (Code)?

        So long,
         Martin

        --
        Die meisten Menschen werden früher oder später durch Computer ersetzt.
        Für manche würde aber auch schon ein einfacher Taschenrechner genügen.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Wenns nicht unbedingt Rot47 heißen muss sondern einfach nur schnell funktionieren soll, mach dir ein Array in dem du die Eingabezeichen einem Ausgabezeichen zuweist. Darin suchst du dir dann aus welches Zeichen in welches andere Zeichen umgewandelt werden soll. In das Array kannst du alles packen was du umwandeln willst. Was nicht drin steht bleibt wie es ist.
    Zur Rückwandlung kannst du per Code das Array in ein zweites umrechnen, das die Zuordnungen wieder umdreht.