AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

verschlüsseln

Ein Thema von Saminem · begonnen am 5. Nov 2010 · letzter Beitrag vom 12. Nov 2010
Antwort Antwort
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#1

AW: verschlüsseln

  Alt 12. Nov 2010, 08:37
Normalerweise trennt man die Darstellung, Ein- und Ausgabe im Formular von der fachlichen Logik.
Das dient der Übersichtlichkeit und erleichtert die Fehlersuche.
Außerdem kann man den Code so später an anderer Stelle wiederverwenden.

Delphi-Quellcode:
  Maske:=254; // damit alle Bits 1 sind außer das letzte
{...}
Eigentlich ist die eine Konstante und sollte auch als solche deklariert werden.

Delphi-Quellcode:
  f:=7; // weil man um 7 nach rechts shr
{...}
An dieser Stelle überflüssig, da die Variable immer überschrieben wird, sollte der Compiler auch melden.

Delphi-Quellcode:
len:=Length(Memo1.Text); //länge des memo
{...}
Eine wichtige Information, die du aber nicht im Bild speicherst.
Schon aus diesem Grund wird es schwierig den Text wieder aus dem Bild zu extrahieren.
Siehe in meinem Beispiel weiter oben.
Da es sich nur um reinen Text handelt, kannst du am Ende des Textes auch ein Null-Zeichen (Binär #0) speichern,
um das Ende zu markieren. Besonders schön ist das aber auch nicht.

Delphi-Quellcode:
For y:=0 to hoehe-1 do begin
{...}
Wo kommen den auf einmal "hoehe" und "breite" her?
Globale Variablen? Pfui!
Entweder du definierst lokale Variablen
Delphi-Quellcode:
hoehe := Image1.picture.Bitmap.Height;
breite := Image1.Picture.Bitmap.Width;
oder benutzt gleich diese Property.

        For x:=0 to (breite*3) do begin // an der stelle x das byte verändern <- Fehler
Die Variable x wird hier zu groß. Die Zeile besteht im Pixelformat pf24Bit aus (breite *3) Byte, da die Zählung mit 0 beginnt:
        For x:=0 to (breite*3) - 1 do begin // an der stelle x das byte verändern <- Richtig
Warum rückst du an dieser Stelle eigentlich den Code ein?

Delphi-Quellcode:
          f:=7; // damit f immer wieder null wird
          temp:=p1[x] and Maske; //p1 byte und maske um das letzte bit 0 zu setzen
          f:=f-g; // da man im nächsten byte die 2te stelle 0 setzt
          v:=v shr f; // um das erste bit des buchstaben zu bekommen
Warum nicht gleich so:
Delphi-Quellcode:
          temp:=p1[x] and Maske; //p1 byte und maske um das letzte bit 0 zu setzen
          v:=v shr (7 - g); // um das jeweilige bit des buchstaben zu bekommen
Damit entfällt f komplett.

          P1[x]:=temp or v; // um das byte mit dem letzten bit verändert wieder ins memo zu schreiben Das unterste Bit von "temp" ist 0.
Das unterste Bit von "v" enthält die zu speichernde Information (0 oder 1).
Aber die anderen Bits von v sind nicht unbedingt leer und müssen vorher ausmaskiert werden.
Delphi-Quellcode:
 Maske2 = 1;
{nur unterstes Bit in v enthält die Information, Rest vor der verknüpfung löschen}
P1[x]:=temp or (v and Maske2);
Delphi-Quellcode:
          if m>=len then // verhindert das diese schleife das ganze bild verändert
           exit; // Aktion um diese Procedure zu beenden
Fehler, da wird ein zeichen zu wenig gespeichert, da der Text von 1 bis len geht.


Hier noch ein kurzes Beispiel wie man ein zusätzliches Nullzeichen speichern kann, um das Textende zu markieren:
Delphi-Quellcode:
        For x:=0 to (breite*3) - 1 do begin // an der stelle x das byte verändern
          if m <= len then
            v:=ord(Memo1.Text[m]); // Buchstabe in Zahl und dann ins byte
          else
            v := 0;
          temp:=p1[x] and Maske; //p1 byte und maske um das letzte bit 0 zu setzen
          v:=v shr (7 - g); // um das jeweilige Bit des Buchstaben zu bekommen
          P1[x]:=temp or v; // um das byte mit dem letzten bit verändert wieder ins memo zu schreiben
          if g<7 then // damit man immer nur maximal nach 6 shiftet
            inc(g)
          else
          begin
            g:=0; // g wieder 0 setzen
            inc(m); // um neuen Buchstaben zu bekommen
          end;

          if m> (len + 1) then // verhindert das diese schleife das ganze bild verändert
           exit; // Aktion um diese Procedure zu beenden
        end; // Annmerkung hoehe und breite schon im private deklariet
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: verschlüsseln

  Alt 12. Nov 2010, 10:26
Nur um das mal klar zu stellen. Es handelt sich hier nicht um eine Verschlüsselung, es wird ja nichts verschlüsselt. Sondern hier werden Informationen versteckt. Dies nennt man Steganographie.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz