Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht! (https://www.delphipraxis.net/157592-meminicrypt-vollverschluesseltes-arbeiten-mit-ini-dateien-kommentare-erwuenscht.html)

Deep-Sea 18. Jan 2011 12:36

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
 
Und was spricht gegen eine von der Allgemeinheit als sicher eingestufte und verbreitete Chiffre (egal ob nun Block oder Strom)?
Scheint mir persönlich zumindest besser zu sein, als einen nicht verbreiteten, proprietären Algorithmus zu nutzen, der wohl auch nie einem Peer-Review zugeführt wurde. :-D

CodeX 18. Jan 2011 17:02

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
 
Zitat:

Zitat von gammatester (Beitrag 1075415)
Man kann auch an der verschlüsselten Datei rumspielen.

Es geht nicht darum, Vandalismus vorzubeugen, sondern andere Verwendungszwecke als die vorgeschriebenen auszuschließen.

Zitat:

Zitat von gammatester (Beitrag 1075410)
Was spricht denn gegen 128-Bit-AES/CBC, wobei Du für jeden Eintrag, den Du verschlüsselst, einen Zufalls-IV nimmst und diesen mit abspeicherst?

Nach ein paar Zeitmessungen war Rijndael (~AES) gibt etwas langsamer als RC4. Und der von Dir angesprochene RC4 Bug ("Bug in RC4 implementation: Ray Marron has reported a bug in the RC4 implementation in DCPcrypt that means that when encrypting data sets over 8192 bytes in size the results will non-standard.") besagt doch nur aus, dass die RC4 Verschlüsselung ab einer bestimmten Größe nicht mehr kompatibel mit einer korrekten RC4 Implementierung ist. Das ist aber für den Einsatzzweck hier imho völlig irrelevant, da zum Ver- und Entschlüsseln die gleiche Implementierung verwendet wird.

Aber nun gut, da die Unit mittlerweile nicht nur in meinem Projekt Verwendung finden soll, sondern auch anderen helfen könnte, werde ich die Standardverschlüsselung mal auf Rijndael umstellen und mal schauen, ob ich das mit dem Initialisierungsvektor hinbekomme...

CodeX 18. Jan 2011 18:49

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
 
Ich habe jetzt zwecks Kompatibilität doch auf Rijndael und SHA256 umgestellt. Aber das mit dem Initialisierungsvektor habe ich nicht hinbekommen. Ich weiß nicht, ob ich das richtig verstehe, aber für eine CBC-Verschlüsselung mit IV müsste ich doch sowieso erstmal statt EncryptStream EncryptCBC verwenden. Ach keine Ahnung. Wenn jemand seinen Teil zum Ganzen beitragen will, gerne direkt mit Code. Danke.

gammatester 18. Jan 2011 20:33

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
 
Für den Initialsierungsvektor nimmst bei jedem Verschlüsseln ein Zufalls-16-Bytearray, und rufst AES.Init(key128,16,IV,16), danach AES.Encode(plain,ct,sizeof(plain)) auf. Dann schreibst Du den selbstverständlich unverschlüsselten IV und den Ciphertext ct in Deine INI (HEX oder Base64-kodiert, halt wie Du's jetzt auch schon kodierst).

Beim Entschlüsseln liest Du die kodierten IV, CT; decodierst, und rufst dann AES.Init(key128,16,IV,16), anschließend AES.Decode(ct,pt,sizeof(ct)) auf.

Hier eine Demo mit Testvektoren:
Delphi-Quellcode:
program t_AES_CBC;

{$apptype console}

uses
  SysUtils, Classes, DECCipher;

var
  AES: TCipher_Rijndael;

var
  key128 : array[0..15] of byte = ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,
                                   $ab,$f7,$15,$88,$09,$cf,$4f,$3c);

      IV : array[0..15] of byte = ($00,$01,$02,$03,$04,$05,$06,$07,
                                   $08,$09,$0a,$0b,$0c,$0d,$0e,$0f);

  plain : array[0..63] of byte = ($6b,$c1,$be,$e2,$2e,$40,$9f,$96,
                                   $e9,$3d,$7e,$11,$73,$93,$17,$2a,
                                   $ae,$2d,$8a,$57,$1e,$03,$ac,$9c,
                                   $9e,$b7,$6f,$ac,$45,$af,$8e,$51,
                                   $30,$c8,$1c,$46,$a3,$5c,$e4,$11,
                                   $e5,$fb,$c1,$19,$1a,$0a,$52,$ef,
                                   $f6,$9f,$24,$45,$df,$4f,$9b,$17,
                                   $ad,$2b,$41,$7b,$e6,$6c,$37,$10);

  ct_cbc : array[0..63] of byte = ($76,$49,$ab,$ac,$81,$19,$b2,$46,
                                   $ce,$e9,$8e,$9b,$12,$e9,$19,$7d,
                                   $50,$86,$cb,$9b,$50,$72,$19,$ee,
                                   $95,$db,$11,$3a,$91,$76,$78,$b2,
                                   $73,$be,$d6,$b8,$e3,$c1,$74,$3b,
                                   $71,$16,$e6,$9e,$22,$22,$95,$16,
                                   $3f,$f1,$ca,$a1,$68,$1f,$ac,$09,
                                   $12,$0e,$ca,$30,$75,$86,$e1,$a7);


function test(px,py: pointer): string;
begin
  if CompareMem(px,py,64) then test := 'OK' else test := 'Error';
end;

var
  pt,ct: array[0..63] of byte;

begin
  AES := TCipher_Rijndael.Create;
  //Verschl³sseln
  AES.Mode := cmCBCx;
  AES.Init(key128,16,IV,16);
  AES.Encode(plain,ct,sizeof(plain));
  writeln('CBC test: ', test(@ct,@ct_cbc));
  //Entschl³sseln
  AES.Mode := cmCBCx;
  AES.Init(key128,16,IV,16);
  AES.Decode(ct,pt,sizeof(plain));
  writeln('CBC test: ', test(@pt,@plain));
end.

CodeX 21. Jan 2011 16:54

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
 
Ich würde in MemIniCrypt noch gerne eine neue Funktion (RenameSection) einbauen. Dafür bräuchte ich aber Zugriff auf FSections, das in TMemIniFile als private deklariert ist. Gibt es irgendeine Möglichkeit, doch direkt auf diese Liste zuzugreifen?
edit: Mit GetStrings und SetStrings kann ich natürlich über eine Hilfsliste darauf zugreifen, aber ich würde generell gerne wissen, ob Delphi beim Ableiten vielleicht doch irgendeine Möglichkeit bietet, eine private Variable umzudeklarieren. Bei den ganzen Möglichkeiten (override, reinroduce, inherited, overload, etc.), weiß ich jetzt leider nicht, ob da nicht irgendwas davon auch für private Variablen gilt.

CodeX 23. Jan 2011 15:17

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang eine neue Version (MemIniCrypt 1.1) mit einem notwendigen Fix, ein paar Änderungen und Erweiterungen.
Das Beispielprogramm aus dem ersten Posting müsste leicht angepasst werden, um mit dieser Version zu funktionieren.
Delphi-Quellcode:
// History
// 2011-01-17 1.0 Release
// 2011-01-23 1.1
// - Fix for ReadInteger/Bool etc.
// - Added Encryption as parameter for more control
// - Added two custom functions RenameSection & CloneSection
Das mit dem Initialisierungsvektor habe ich nicht eingebaut, weil mir das immer noch nicht klar genug ist, als dass ich das schnell korrekt einbauen könnte. Sollte jemand Lust haben, das umzusetzen, gerne. Letztlich ist das hier als universelle Lösung für alle Delphi-Programmierer gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Seite 2 von 2     12   

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