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 |
AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
Zitat:
Zitat:
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... |
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.
|
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. |
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. |
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:
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.
// 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 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