Announcement

Collapse
No announcement yet.

Einfach Verschlüsselung in C# und JavaScript

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Einfach Verschlüsselung in C# und JavaScript

    Hallo,
    ich erstelle mit C# einen String, der als HTML-Datei ausgegeben wird. Hierbei möchte ich in einigen Inputfeldern einen Text "verstecken". Dazu habe ich eine einfache Verschlüsselung codiert, die in C# verschlüsselt und in JavaScript wieder entschlüsseln soll.

    In C# (zum verschlüsseln, bzw eher unleserlich machen)
    [highlight=c#]
    public static string Crypt(string text, string k = "xyz")
    {
    var result = new StringBuilder();
    for (int c = 0; c < text.Length; c++)
    result.Append((char)((UInt16)text[c] ^ (UInt16)k[c % k.Length]));
    return result.ToString();
    }
    [/highlight]

    In JavaScript# (zum entschlüsseln, bzw. eher zum wieder leserlich machen)
    function crypt(input, key = "xyz") {
    let result = '';
    for (let i = 0; i < input.length; i++) {
    let charCode = input.charCodeAt(i) ^ key.charCodeAt(i % key.length);
    result += String.fromCharCode(charCode);
    }
    return result;
    }

    Die Rückkonvertierung funktioniert bei den meisten Strings auch richtig, bei einigen Strings treten jedoch Fehler auf:
    erpiesen (statt erwiesen), lässs (statt lässt), bepegen (statt gewegen)

    Auch lange Wörter wie zusammengestellt, verbrennen, beginnen sind oft richtig zurückkonvertiert.

    Woran könnte das liegen und hat jemand einen Lösungsvorschlag. Evtl. auch ein anderes gleich funktionierendes Verschlüsselungsverfahren (bzw. unleserlich machen reicht) könnte mir helfen. Wichtig, dass dies in C# und JS implementierbar ist.
    Peter

  • #2
    Was soll wo unleserlich sein?
    "C# einen String, der als HTML-Datei ausgegeben wird" ???
    Wozu Text in Input-Tags, wenn er nicht lesbar ist?

    Debugge deinen Javascriptcode und prüfe, ob jeder Char richtig decodiert wird. Wenn nicht kannst du i % key.length prüfen.
    Wo ist der Sinn, wenn in HTML sowieso alles lesbar ist
    Rot 13
    https://www.dotnetperls.com/rot13

    https://www.juniordevelopercentral.c...in-javascript/
    Zuletzt editiert von Christian Marquardt; 17.12.2023, 13:37.
    Christian

    Comment


    • #3
      Ich möchte in c# ein Aufgabenblatt erstellen, das Eingabefelder enthält, wobei die Lösungen im HTML "versteckt" werden sollen. Die Struktur eines (leeren) Input-Strings sieht so aus: <input type="text" class="inputGap" name="Field_1" data-gap="sichtbar">
      In das Inputfeld müßte in diesem Beispiel als Lösung das Wort "sichtbar" geschrieben werden. Am Ende kann man mit Klick auf einen Button prüfen, in welchen Feldern der value-Wert gleich dem
      data-gap-Inhalt entspricht. Natürlich möchte ich die Lösung nicht im Klartext in das data-gap Attribut schreiben, sondern "unleserlich" gemacht und über JS bei Klick auf den prüfen-Button wieder entschlüsseln.

      Ich hoffe, dass sich die Sinnhaftigkeit mit dieser Erklärung erschließt und unerklärlicherweise funktioniert das bei 80% der Einträge.
      Peter

      Comment


      • #4
        Warum nimmst du dann nicht der Rot 13 Code.

        Wozu übergibst du einen key (string k = "xyz")
        Wenn es in deinem Code überhaupt nicht auf diesen ankommt, sondern nur auf die Länge?
        Dann kannst du gleich eine Ziffer übergeben.
        Würde mal prüfen, ob immer die verschlüsselte Länge = unverschlüsselte Länge ist.
        Christian

        Comment


        • #5
          Auf Rot13 bin ich noch gar nicht gestoßen. Habs implementiert und es funktioniert! Vielen Dank für den Hinweis

          function crypt(input) {
          return input.replace(/[a-zA-Z]/g,
          function (char) {
          var baseCharCode = char <= 'Z' ?
          'A'.charCodeAt(0) : 'a'.charCodeAt(0);
          return String.fromCharCode((char.charCodeAt(0) - baseCharCode + 13) % 26 + baseCharCode);
          });
          }

          Nachdem im JS-Code die Regex aufgetaucht ist, habe ich vermutlich auch die Erklärung für das Problem. In JS können nur ASCII-Zeichen verwendet werden, gleichermaßen in c# implementiert funktioniert das Ganz wie gewünscht.
          PS: Dieses Code-Snippet habe ich mir übrigens von ChatGPT schreiben lassen

          Peter
          Peter

          Comment

          Working...
          X