AGB  ·  Datenschutz  ·  Impressum  







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

DEC 5.1 wie benutzen?

Ein Thema von delphin06 · begonnen am 2. Feb 2008 · letzter Beitrag vom 23. Nov 2008
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#1

DEC 5.1 wie benutzen?

  Alt 2. Feb 2008, 12:40
Hallo

Ich möchte gerne ein listview verschlüsselt abspeichern. Ich hab dann hier im Forum das DEC von Hagen gefunden. Allerdings wird hier viel nur mit der älteren Version beschrieben. Also ich habe mal die Unit DECCipher eingebunden und habe dan uch 2 passende Funktionen für meinen anwendungsfall gefunden und zwar EncodeStream und DecodeStream.
Allerdings verstehe ich nich was das alles für Parameter sind. Ich muss ja erstma den key initialisieren mit init()

Meine Frage ist nun, was bedeuten die Parameter

von init():
const Key; Size: Integer; const IVector; IVectorSize: Integer; IFiller: Byte = $FF und von decode/encode:
const Source, Dest: TStream; const DataSize: Int64; const Progress: IDECProgress = nil Ich hoffe mir kann jemand helfen. ich weiß einfach nich was ich da eintragen soll.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: DEC 5.1 wie benutzen?

  Alt 2. Feb 2008, 12:53
Ich arbeite gerade an einer Unit mit Hagen zusammen, die zeigt wie man das DEC richtig benutzt um eine Datei zu verschlüsseln. Mal sehen, eventuell bekomme ich das dieses Wochenende noch fertig.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#3

Re: DEC 5.1 wie benutzen?

  Alt 2. Feb 2008, 13:06
Das wäre ja super! Weil mir fehlt da irgendwie de vorgehensweise, was ich alles aufrufen muss und wozu
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#4

Re: DEC 5.1 wie benutzen?

  Alt 2. Feb 2008, 15:32
ich hab mir mal das filecrypt beispiel angeguckt von jus.

Jez hab ich versucht das n bisschen abzuändern, dass anstatt einer Datei direkt ein Stream verwendet wird. Aber irgendiwe klappt das nich. Da kommt dann ein Fehler mit der Meldung "Stream-Lesefehler" und der tritt in der procedure:

Delphi-Quellcode:
procedure TDECCipher.EncodeStream(const Source, Dest: TStream; const DataSize: Int64; const Progress: IDECProgress);
begin
  DoCodeStream(Source, Dest, DataSize, Context.BlockSize, Encode, Progress);
end;
auf.

Hier mal meine abgeänderte version:
Delphi-Quellcode:
procedure EncodeMStream(const ADestFilename: String; const APassword: Binary;
                       ACipher: TDECCipherClass = nil; AMode: TCipherMode = cmCTSx;
                       AHash: TDECHashClass = nil);
 var
  Dest: TStream;

  procedure Write(const Value; Size: Integer);
  begin
    Dest.WriteBuffer(Value, Size);
  end;

  procedure WriteByte(Value: Byte);
  begin
    Write(Value, SizeOf(Value));
  end;

  procedure WriteLong(Value: LongWord);
  begin
    Value := SwapLong(Value);
    Write(Value, SizeOf(Value));
  end;

  procedure WriteBinary(const Value: Binary);
  begin
    WriteByte(Length(Value));
    Write(Value[1], Length(Value));
  end;

var
  Sourcestr: TMemoryStream;
  Seed: Binary;
begin
  {if ASourceFileName=ADestFilename then
  begin
    showmessage('Source file and destination file must not be equal!');
    exit;
  end; }

  ACipher := ValidCipher(ACipher);
  AHash := ValidHash(AHash);
  Seed := RandomBinary(16);
  //Source := TFileStream.Create(ASourceFileName, fmOpenReadWrite);
  Sourcestr:=TMemorystream.Create();
  try
    sourcestr.WriteComponent(Form1.listview1);
    Dest := TFileStream.Create(ADestFilename, fmCreate);
    try
      with ACipher.Create do
        try
          Mode := AMode;
          Init(AHash.KDFx(APassword, Seed, Context.KeySize));

          WriteLong(Identity);
          WriteByte(Byte(Mode));
          WriteLong(AHash.Identity);
          WriteBinary(Seed);
          WriteLong(Sourcestr.Size);
          EncodeStream(Sourcestr, Dest, Sourcestr.Size);
          WriteBinary(CalcMAC);
        finally
          Free;
        end;
    finally
      Dest.Free;
    end;
      //ProtectStream(Source);
  finally
    Sourcestr.Free;
  end;
  //DeleteFile(AFileName);
end;
Was habe ich falsch gemacht?
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: DEC 5.1 wie benutzen?

  Alt 2. Feb 2008, 20:32
Wenn du in einen leeren Stream zb. 1024 Bytes geschrieben hast, wo steht dann der Stream.Position ? Bei 1024 richtig.
Wenn du nun anschließend aus dem Stream was lesen möchtest un Stream.Position = Stream.Size wieviele Bytes kann man dann noch aus dem Stream lesen ? Ah, garkeine da man ja am Ende des Streams ist, richtig.

Delphi-Quellcode:
SourceStr.WriteComponente(blabla)
if SoureStr.Position = SourecStr.Size then
  ShowMessage('Ähm, wenn du nachher mit SourceStr.Read() was lesen möchtest dann solltest du auch SourceStr.Positon := 0 aufrufen');
Also Stream.Position :=0; bevoir du versucht wieder aus dem Stream zu lesen.

einen Stream verschlüsseln auf einfachste Weise
Delphi-Quellcode:
with TCipher_Rijndael.Create do // Cipher erzeugen
try
  Init('Passwort'); // mit Passwort initialisieren
  EncodeStream(SourceStream, DestStream, -1); // Stream verschlüssen
finally
  Free; // Cipher freigeben
end;
Beachte das obiges Beispiel die Minimalkonfiguration darstellt, man kann es aus Sicht der Kryptographie noch besser=sicherer machen.

Gruß Hagen

PS: gewöhne dir an deutsch zu schreiben, ich weiß es ist schwer auf modischen Schnickschnack zu verzichten besonders wenn man bischen extrovertiert erscheinen möchte und sein "Image" aufbauen möchte. Aber ansonsten antworte ich einfach nicht mehr
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#6

Re: DEC 5.1 wie benutzen?

  Alt 3. Feb 2008, 11:09
Zitat von negaH:
PS: gewöhne dir an deutsch zu schreiben, ich weiß es ist schwer auf modischen Schnickschnack zu verzichten besonders wenn man bischen extrovertiert erscheinen möchte und sein "Image" aufbauen möchte. Aber ansonsten antworte ich einfach nicht mehr
OK. Ich werde es versuchen^^ Aber ehrlich gesagt weiß ich nicht was du für ein Problem hast.

Ich danke dir für deine Hilfe! Damit kann ich schonmal was anfangen. Ich habe noch nicht allzu viel mit Streams gearbeitet.

Aber eine Frage habe ich nochmal:
1. Was bedeutet das "-1" in der Zeile
EncodeStream(SourceStream, DestStream, -1);

Gruß

[EDIT] Ich habe jetzt wie du gesagt hattest die Stream Position vorher auf 0 gesetzt und das funktioniert jetzt wunderbar. Nochmal RIESEN Dankeschön! Genauso sollte das funktionieren. Der obere Code ist natürlich besser als die Minimalkonfiguration, weil da kann ich auch prüfen ob das Passwort richtig ist.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: DEC 5.1 wie benutzen?

  Alt 3. Feb 2008, 13:07
Zur Beantwortung deiner Frage würde ich die Unit DECCipher.pas öffnen und im Interfaceteil der Unit nach der Deklaration von TDECCipher.EncodeStream() suchen.

Du findest dann das hier

Delphi-Quellcode:
    
procedure EncodeStream(const Source, Dest: TStream; const DataSize: Int64; const Progress: IDECProgress = nil);
Danach würde ich in die Implementierung dieser Funktion gehen und du findest den Aufruf der internen Procedure DoCodeStream(). Diese Proc ist in Pascal geschrieben und damit eigentlich auch lesbar

DataSize bezeichnet also die Anzahl an Bytes die aus Stream "Source" nach "Dest" verschlüsselt werden sollen. Man kann mit DEC's Streamfunktionen, bzw. eigentlich mit fast allen Streamfunktionen die halbwegs logisch aufgebaut sind, auch nur Teile einen Streams verschlüsseln. Zb. man ver-entschlüsselt ab dem 1000 Bytes eines Streams nur 100 Bytes nach Dest. Dazu wird Stream.Position benutzt.

Wenn man zb. ab .Position := 1000 alles bis .Size = 1500 aus einem TFileStream verschlüsseln möchte müsste man es so aufrufen:

Delphi-Quellcode:
  Source.Position := 1000;
  EncodeStream(Source, Dest, Source.Size - Source.Position);
Das Subtrahieren von .Size - .Position verlangt aber beim TFileStream ständige Aufrufe von .Seek(). Nun Seek() wiederum nutzt das Windows-FileAPI und das ist speziell bei .Seek() arsch langsam. Dh. wenn man Dateioperationen möglichst schnell haben möchte dann sollte man die Aufrufe von .Size und .Position reduzieren und optimieren.

Nun der Aufruf von

Delphi-Quellcode:
  Source.Position := 1000;
  EncodeStream(Source, Dest, -1);
ist identisch zu obigem Aufruf, spart aber zwei Aufrufe von .Seek() da wir .Size und .Position nicht mehr aufrufen.

Die -1 bedeutet also: ver/entschlüssele alles von der aktuellen .Position bis zum Ende des Stream's = .Size.

Zudem fängt es Fehler ab. Wenn zb. Source.Positon und/oder Soure.Size vom Programierer in lokalen Variablen selber berechnet wird (siehe meine Implementation von DoCodeSream) und dabei aber falsch berechnet wurde so das Position > Size wäre so ergibt sich ein negativer Wert von DataSize. In diesem Falle fängt das DoCodeStream() ab und berechnet selber die Anzahl an Bytes von .Position bis .Size des Streams.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: DEC 5.1 wie benutzen?

  Alt 3. Feb 2008, 13:27
Zitat:
OK. Ich werde es versuchen^^ Aber ehrlich gesagt weiß ich nicht was du für ein Problem hast.
Ich habe ansich kein Problem. Nur vertrete ich die Meinung das wir Deutschen in unserer Sprache ständig irgendwelchen Modetrends bzw. absichtlich geschaffenen Wortschöpfungen der kommerziellen Industrie nachrennen. Das erfolgt ohne plausiblen Grund, besonders weil die deutsche Sprache eine sehr präzise und schöne Sprache ist. Im Umkehrschluß, meine Meinung zur Realität, ergibt sich für mich daraus eine Handlungsanweisung: nämlich kämpfe aktiv gegen solche Unsitten. Da Du der Fragende bist und ich der potentiell beste Antworter für deine Frage, habe ich die Möglichkeit indirekt Druck auf dich auszuüben, und das mache ich auch. Denn ich möchte das wir in 50 Jahren auch noch gutes Deutsch reden können. Denn die Sprache ist es die unsere Denkweise und Kommunikationsform untereinander definiert, ändert man die Sprache nach rein kommerziellen oder nach irgendwelchen Harlemgang Slang so ändert man die Denkweise der Menschen. Das möchte ich nicht und so kämpfe ich dagegen.

Zudem definiert sich die Gesamtqualität der Delphi Praxis eben auch gerade über die benutzte Sprache und der zwischenmenschliche Umgangston. Je besser dieser ist desto höher ist die Wahrscheinlichkeit das in Fragen Delphi/Pascal die Delphi Praxis im deutschsprachigen Raum die Nase vorne hat.

Ich möchte also verhindern das immer mehr Leute hier deinen Jargon nachahmen, bzw. an Hand dieses Threads erkennen können, wie ich gerne reden möchte.

Aus meiner Sicht handelst du also egoistisch: du stellst deine Frage in deinem Slang und erwartest das dir speziell auch geantwortet wird und damit auch geholfen wird. Andere Hilfesuchende mit dem gleichen Problem sprechen nicht deine Sprache und somit wäre dieser Thread auch für diese Leute wenig hilfreich. Du bist der Hilfesuchende und ich stelle klar das du es bist der sich an den potentiell Antwortenden anpassen musst, nicht umgekehrt. Es ist meine Zeit die ich verschwende um deine Probleme zu lösen, und wenn du dann noch im Slang redest verlangst du von mir das ich das in mein Deutsch übersetzen soll. Im Grunde also unverschämt von dir.

Ich bin also nur ehrlich und offen zu dir und sage dir direkt was ich an Konsequenzen zu ziehen bereit sein werde. Ich könnte auch einfach meine Zeit anders nutzen und lasse dich mit deiner Frage im Stich. Dann würdest du irgendwann schon von selber merken das irgendwas nicht stimmt, da du nämlich Zeit verlierst, und änderst dich dann doch. Du würdest dich also selber anpassen und verändern in deiner Sprache und schwups wird dir auch wieder geholfen. Du als Fragender hast also im Grunde die Pflicht deine Fragen so zu formulieren das ein Antwortender dir schnell helfen kann, ansonsten antwortet dir eben keiner Ergo: mit deinem Slang schiesst du dir in's eigene Knie.

Gruß Hagen

[edit]
Das es nun konkret dich getroffen hat ist -> Pech gehabt
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

Re: DEC 5.1 wie benutzen?

  Alt 3. Feb 2008, 13:32
Gut gebrüllt, Löwe
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: DEC 5.1 wie benutzen?

  Alt 3. Feb 2008, 14:07
Die Argumentation von negaH gefällt mir sehr gut!
Ich hoffe nicht nur mir ist in letzter Zeit die Gleichgültigkeit der Mitglieder aufgefallen, wenn man sie daraufhin anspricht.
So ganz nach dem Motto: ist halt Chat-Sprache...Müsst ihr alle damit leben.
Das Delphipraxis Forum ist eben kein Chat! (Chatfunktion wäre sogar vorhanden, hat aber nichts mit den öffentlichen Threads zu tun)

Ich denke auch, dass die darauf angesprochenen Leute nicht vorsätzlich so handeln ,
sie sind sich ihrer verwendeten was-auch-immer-Sprache leider nicht bewusst, weil anscheinend im tägl. Umfeld nur so geschrieben wird.

Beleidigte Reaktionen sind dann aber falsch, schließlich möchte der Threadsteller ja etwas.
Und viele Mitglieder hier sind bereit da auch Zeit zu investieren und zu helfen.

Die Eigenschaft OBJEKTIV mit Kritik umzugehen ist ein wesentlicher Faktor zur persönlichen Weiterentwicklung.
[/mein Wort zum Sonntag]
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


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 17:45 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