AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Eigene kleine Verschlüsslung
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene kleine Verschlüsslung

Ein Thema von Premaider · begonnen am 24. Jun 2012 · letzter Beitrag vom 24. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#1

Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 12:20
Hey Leute ich wollte mir eine eigene, kleine Verschlüsslung von Datein schreiben.
Ich habe bis jetzt das:
Delphi-Quellcode:
for i := 0 to Memo1.Lines.Count -1 do
    begin
      Edit2.text:=Memo1.lines[i];
      j:=length(Edit2.text);
      For h := 1 to j do
        If Edit2.text[h]='AThen Edit2.text[h]:='BElse
        If Edit2.text[h]='BThen Edit2.text[h]:='CElse
        If Edit2.text[h]='CThen Edit2.text[h]:='DElse
        If Edit2.text[h]='DThen Edit2.text[h]:='EElse
        If Edit2.text[h]='EThen Edit2.text[h]:='FElse
        If Edit2.text[h]='FThen Edit2.text[h]:='GElse
        If Edit2.text[h]='GThen Edit2.text[h]:='HElse
        If Edit2.text[h]='HThen Edit2.text[h]:='IElse
        If Edit2.text[h]='IThen Edit2.text[h]:='JElse
        If Edit2.text[h]='JThen Edit2.text[h]:='KElse
        If Edit2.text[h]='KThen Edit2.text[h]:='LElse
        If Edit2.text[h]='LThen Edit2.text[h]:='MElse
        If Edit2.text[h]='MThen Edit2.text[h]:='NElse
        If Edit2.text[h]='NThen Edit2.text[h]:='OElse
        If Edit2.text[h]='OThen Edit2.text[h]:='PElse
        If Edit2.text[h]='PThen Edit2.text[h]:='QElse
        If Edit2.text[h]='QThen Edit2.text[h]:='RElse
        If Edit2.text[h]='RThen Edit2.text[h]:='SElse
        If Edit2.text[h]='SThen Edit2.text[h]:='TElse
        If Edit2.text[h]='TThen Edit2.text[h]:='UElse
        If Edit2.text[h]='UThen Edit2.text[h]:='VElse
        If Edit2.text[h]='VThen Edit2.text[h]:='WElse
        If Edit2.text[h]='WThen Edit2.text[h]:='XElse
        If Edit2.text[h]='XThen Edit2.text[h]:='YElse
        If Edit2.text[h]='YThen Edit2.text[h]:='ZElse
        If Edit2.text[h]='ZThen Edit2.text[h]:='AElse
        If Edit2.text[h]='aThen Edit2.text[h]:='bElse
        If Edit2.text[h]='bThen Edit2.text[h]:='cElse
        If Edit2.text[h]='cThen Edit2.text[h]:='dElse
        If Edit2.text[h]='dThen Edit2.text[h]:='eElse
        If Edit2.text[h]='eThen Edit2.text[h]:='fElse
        If Edit2.text[h]='fThen Edit2.text[h]:='gElse
        If Edit2.text[h]='gThen Edit2.text[h]:='hElse
        If Edit2.text[h]='hThen Edit2.text[h]:='iElse
        If Edit2.text[h]='iThen Edit2.text[h]:='jElse
        If Edit2.text[h]='jThen Edit2.text[h]:='kElse
        If Edit2.text[h]='kThen Edit2.text[h]:='lElse
        If Edit2.text[h]='lThen Edit2.text[h]:='mElse
        If Edit2.text[h]='mThen Edit2.text[h]:='nElse
        If Edit2.text[h]='nThen Edit2.text[h]:='oElse
        If Edit2.text[h]='oThen Edit2.text[h]:='pElse
        If Edit2.text[h]='pThen Edit2.text[h]:='qElse
        If Edit2.text[h]='qThen Edit2.text[h]:='rElse
        If Edit2.text[h]='rThen Edit2.text[h]:='sElse
        If Edit2.text[h]='sThen Edit2.text[h]:='tElse
        If Edit2.text[h]='tThen Edit2.text[h]:='uElse
        If Edit2.text[h]='uThen Edit2.text[h]:='vElse
        If Edit2.text[h]='vThen Edit2.text[h]:='wElse
        If Edit2.text[h]='wThen Edit2.text[h]:='xElse
        If Edit2.text[h]='xThen Edit2.text[h]:='yElse
        If Edit2.text[h]='yThen Edit2.text[h]:='zElse
        If Edit2.text[h]='zThen Edit2.text[h]:='a';
Mir sagt Delphi "[Fehler] Unit1.pas(73): Der linken Seite kann nichts zugewiesen werden" aber wieso ?
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 12:31
Die ganzen IF-Dinger kannst Du Dir sparen, wenn Du dir mal Delphi-Referenz durchsuchenchr() und Delphi-Referenz durchsuchenord() anschaust. Dann brauchst Du Dir nur noch den "Sonderfall Z" vorzunehmen und hier "z" bzw. "Z" durch "a" bzw. "A" ersetzen. Dann hast Du einen übersichtlichen Quellcode und maximal 10 Zeilen zu programmieren

Delphi-Quellcode:
 i : integer;
 ascii : integer;
 Text1 : String;
 Text2 : String;
 [...]
 Text2 := '':
 for i := 1 to Length(Text1) do
  Text2 := Text2 + Chr(Ord(Text1[i])+1); // Sonderfall "z" nicht berücksichtigt, nur ein Denkanstoß...
 [...]
Michael Kübler
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 12:32
Von andern Fragen, die mir bei diesem Code in den Sinn kommen, einmal abgesehen:

Was hat Dich motiviert, ein Edit-Feld als Zwischenspeicher zu verwenden? Eine lokale Variable vom Typ "String" wäre vermutlich besser geeignet und würde den von Dir beschriebenen Fehler vermutich gar nicht erst entstehen lassen.

Noch ein Hinweis. Schaue Dir mal die Funktionen "Delphi-Referenz durchsuchenOrd" und "Delphi-Referenz durchsuchenChr" an. Jeder Buchstabe hat auch eine numerische Repräsentation als Zahl. So hat das "A" etwa den Zahlenwert "65". Und das "B" die "66". Mit diesem Wissen könntest Du einiges an Code sparen.

//Edit: Mist, zu langsam.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#4

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 12:32
Das ist das aber wieder etwas das ich nicht ganz verstehe. Ich möchte es gerne so schaffen
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 12:35
Meinetwegen.

"Text" ist eine String-Property vom Edit-Feld und auf diese kannst Du nicht per Zeichen-Index schreibend zugreifen. Um eine String-Variable wirst Du nicht umhinkommen, auch wenn es Dir nicht sonderlich gefallen sollte.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#6

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 12:54
Ich hab mir Chr() und Ord() mal angeguckt. Habe es glaube ich schon zu ca. 50% verstanden ;D

Sieht bei mir jetzt so aus
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
i,h,j,k:integer;
Text1: String;
Text2: String;
begin
If Edit1.text<>'Keine Datei ausgewähltThen DateiKopieren(PChar(OpenDialog1.FileName),GetTempDir + 'Premaider.txt',true);
Memo1.lines.loadfromfile(GetTempDir + 'Premaider.txt');
for i := 0 to Memo1.Lines.Count -1 do
    begin
      Text2:='';
      j:=length(Memo1.lines[i]);
      Text1:=Memo1.lines[i];
      For h := 1 to j do
      If (Text2<>'Z') and (Text2[h]<>'z') Then Text2:=Text2 + Chr(Ord(Text1[i])+1) Else
      If Text2[h]='ZThen Text2[h]:='A';
      If Text2[h]='zThen Text2[h]:='a';
end;
end;
aber man bekommt beim Durchführen einen Zugriffsfehler bei "If (Text2<>'Z') and (Text2[h]<>'z') Then Text2:=Text2 + Chr(Ord(Text1[i])+1) Else"

Geändert von Premaider (24. Jun 2012 um 13:07 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 13:16
Schaue Dir an, wann Du auf die wievielte Stelle eines Strings zugreifen möchtest und ob der String dann diese Länge auch schon hat. Wenn Dein String z.B. die Zeichenfolge "Hallo" enthält, darfst Du nur auf die Positionen 1 bis 5 zugreifen. Alles andere provoziert den von Dir beobachteten Fehler.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#8

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 13:16
Fehler
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 13:37
Delphi-Quellcode:
      For h := 1 to j do
      If (Text2<>'Z') and (Text2[h]<>'z') Then Text2:=Text2 + Chr(Ord(Text1[i])+1) Else
      If Text2[h]='ZThen Text2[h]:='A';
      If Text2[h]='zThen Text2[h]:='a';
Fehlerhafte Stelle! Hättest du richtig eingerück, wärs dir sofort aufgefallen...
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#10

AW: Eigene kleine Verschlüsslung

  Alt 24. Jun 2012, 13:57
TEdit.Text ist ein Property.
Property kann man entweder nur komplett auslesen oder beschreiben.
(nur Objekte sind indirekt eine Ausnahme, wobei das eigentlich Zeiger sind und auch hier der Zeiger nur koplett befüllt werden kann, aber das referenzierte Objekt natürlich eigenständig ist)

Edit2.Text[h] liest praktisch das Property i eine temporäre Stringvariable aus und [h] graift dann auf ein Zeichen in der Kopie zu.

Lösung: Vorher .Text in eine eigene Stringvariable auslesen/kopieren, dort bearbeiten und dann am Ende komplett zurückschreiben.


Bei Edit2.Text[h] geben sogar uralte Delphis eine Fehlermeldung zurück, so wie du es bekommen hast, denn ein Teil-Property ist eben nicht beschreibbar.
Bei Records, als Property gab es lange Zeit ein Problem, wo der Compiler früher keine Fehlermeldung ausgab und den Schreibzugriff auf die Kopie ohne Fehlermeldung zuließ, nur daß diese Änderungen eben nie im Property angekommen sind. (das hat man inzwüschen zum Glück behoben)

PS: viele gleiche IFs = ein CASE
Wobei ja schon angemerkt wurde, daß es hier eine regelmäßige Gesetzmäßigkeit gibt, welche man mathematisch ausnutzen kann.
Aber das die Groß- und Kleinbuchstaben ordinal nicht direkt zusamenhängen, womit man es nicht zusammenhängend berechnen kann.
Ein CASE über die 4 Teilbereichen ("A" bis "Y", "Z", "a" bis "y" und "z") unterteilen und jeweils eine Berechnugn dafür.

Zitat:
If Edit2.text[h]='zThen Edit2.text[h]:='a';
Sicher daß du ein kleines A meinst?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Jun 2012 um 14:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz