Announcement

Collapse
No announcement yet.

Verschlüsselten String aus diversen Substrings erzeugen

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

  • Verschlüsselten String aus diversen Substrings erzeugen

    Hallo,

    Umg.: Delphi 6 Ent. UP2

    Ich habe verschiedene Strings (S1, S2, S3 und S4) vorliegen, die ich - wie auch immer - zu einem einzigen verschlüsselten String zusammensetzen möchte. Dieser verschlüsselte String muss auch wieder entschlüsselt werden können, so dass letztendlich wieder die ursprünglichen Bestandteile S1, S2, S3 und S4 resultieren.

    Da a priori nicht klar ist, wie lange jeder einzelne String ist, wird aller Voraussicht nach eine Art Längenbyte ebenfalls gespeichert werden müssen.

    Ich denke, dass sowas in ähnlicher Form schon x-mal realisiert wurde und ich somit das sprichwörtliche Rad nicht nochmals erfinden muss. Daher hoffe ich, dass mir der ein oder andere gute Tipps geben kann :-)

    Gruß
    Stephan

  • #2
    Hi Stephan,
    .
    setze vor jeden String ein Längenbyte, dann die Strings zusammen und dann verschlüsseln.
    Das Längenbyte realisiere als HEX. Hier die Routine zum Umwandeln von Integer in String:
    <pre class="sourcecode"><code>
    <b>procedure</b> TLizenz.SetNetzwerkAnzahl(<b>const</b> Value: Integer);
    <b>var</b>
    HexStr: <b>String</b>;
    LowChar, HighChar: Char;
    <b>begin</b>
    HexStr := IntToHex(Value, 2);
    LowChar := HexStr[2];
    HighChar := HexStr[1];
    // mache irgendwas mit den Chars
    <b>end</b>;
    </code></pre>
    Und hier zum Zurückwandeln:
    <pre class="sourcecode"><code>
    <b>function</b> TLizenz.GetNetzwerkAnzahl: Integer;
    <b>var</b>
    LowChar, HighChar: Char;
    HexStr: <b>String</b>;
    <b>begin</b>
    result := 1;

    <font color="blue"><i>// zusammensetzen beider Byte zu einem Hex</i></font>
    LowChar := FunctionZumLesenDesChars;
    HighChar := FunctionZumLesenDesChars;
    HexStr := HighChar + LowChar;
    <b>if</b> HexStr = <font color="red">'00'</font> <b>then</b>
    HexStr := <font color="red">'01'</font>;

    result := HexToInt(HexStr);
    <b>end</b>;

    <b>function</b> HexToInt(Hex: <b>String</b>): Integer;
    <b>var</b>
    str: <b>String</b>;
    code: Integer;
    <b>begin</b>
    str := <font color="red">'$'</font> + Hex;
    val(str, result, code);
    <b>if</b> code &lt;&gt; 0 <b>then</b>
    result := 0;
    <b>end</b>;
    </code></pre&gt

    Comment


    • #3
      Hi Stephan,
      .
      setze vor jeden String ein Längenbyte, dann die Strings zusammen und dann verschlüsseln.
      Das Längenbyte realisiere als HEX.
      Hier die Routine zum Umwandeln von Integer in String (limitiert auf ein Hex-Wert):
      <code>
      <b>function</b> LenToStr(<b>const</b> Value: Byte): <b>String</b>;
      <b>var</b>
      HexStr: <b>String</b>;
      LowChar, HighChar: Char;
      <b>begin</b>
      HexStr := IntToHex(Value, 2);
      LowChar := HexStr[2];
      HighChar := HexStr[1];
      result := HighChar + LowChar;
      <b>end</b>;
      </code>
      Und hier zum Zurückwandeln:
      <code>
      <b>function</b> StrToLen(<b>const</b> Value: <b>String</b>): Byte;
      <b>var</b>
      LowChar, HighChar: Char;
      HexStr: <b>String</b>;
      <b>begin</b>
      <font color="blue"><i>// zusammensetzen beider Chars zu einem Hex</i></font>
      <font color="blue"><i>// Voraussetzung Value ist nur 2 Zeichen lang, sonst noch mehr verarbeiten</i></font>
      LowChar := Value[2];
      HighChar := Value[1];
      HexStr := HighChar + LowChar;
      result := HexToInt(HexStr);
      <b>end</b>;
      <br><b>function</b> HexToInt(Hex: <b>String</b>): Integer;<font color="blue"><i> // gibts nicht in Delphi</i></font>
      <b>var</b>
      str: <b>String</b>;
      code: Integer;
      <b>begin</b>
      str := <font color="red">'$'</font> + Hex;
      val(str, result, code);
      <b>if</b> code &lt;&gt; 0 <b>then</b>
      result := 0;
      <b>end</b>;
      </code>
      Prinzipiell sollte das auch mit mehr als einem Hex-Wert gehen.
      Der String könnte vorm Verschlüsseln dann so aussehen: "03abc05abcde04abcd03abc&quot

      Comment

      Working...
      X