Autor Beitrag
FAlter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 192

Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
BeitragVerfasst: So 06.06.04 18:36 
Aber ich finde, dass auch Verstecken schon zur Sicherheit beitragen kann. Und dazu noch der Rest - macht die eigentliche Sicherheit.
Möglicherweise irrt er sich etwas.
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: So 06.06.04 18:53 
sicher nicht. gib uns dein prog (kompiliert) und man kann durch "reverse engineering" den algorithmus und die schlüsselgenerierung nachvollziehen.

raziel

_________________
JSXGraph
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 06.06.04 18:55 
Hallo!

Ich habe hier nicht alles gelesen, aber es ist eines der Prinzipien der Verschlüsselung, dass die Sicherheit eines Algorithmus nicht davon abhängen darf, ob er bekannt ist oder nicht! Und ehrlich gesagt, würde ich keinem Algorithmus, der nicht öffentlich ist, meine Daten anvertrauen. Woher soll ich denn wissen, wie gut er ist?

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
FAlter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 192

Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
BeitragVerfasst: So 06.06.04 19:02 
raziel hat folgendes geschrieben:
sicher nicht. gib uns dein prog (kompiliert) und man kann durch "reverse engineering" den algorithmus und die schlüsselgenerierung nachvollziehen.

raziel


Hier!
Motzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 06.06.04 20:12 
Wie Peter Lustig schon geschrieben hat, ein Algorithmus kann nur dann als sicher eingestuft werden, wenn alle Details über den Algo bekannt sind, er aber dennoch nicht geknackt werden kann.

Veröffentlich deinen Source und ich kann ihn mir mal anschaun.. aber nur weil ich ihn dann nicht knacken kann heißt das trotzdem noch nicht, dass er auch sicher ist..! ;)

Zitat:
Zitat:
Die Sicherheit basiert aber dennoch nur auf dem kurzen Passwort..! Ich brauche schließlich nur das kurze Passwort zu kennen um daraus den langen Schlüssel berechnen zu können..!

Nun, dieses "kurze" Passwort ist natürlich niche mehrere MB lang lang, aber Ein Sprichwort ist doch schon ziemlich lang oder ein Gedicht. Oder man nimmt einfach Teile eines Liedes ("DhGDEheD(A)"). Wenn man möchte, kann man auch den Ihnalt des letzten Briefes nehmen. Dieser sollte dann einiger KB groß sein.

Was hat das jetzt damit zu tun..? Ich wollte damit darauf hinweisen, dass durch die "berechnete Verlängerung" des Passwortes die Verschlüsselung nicht sicherer wird, da die Sicherheit dennoch nur auf dem kurzen Passwort beruht und nicht auf dem längeren berechneten!

Eine BruteForce-Attacke ist im Allgemeinen sowieso die ineffizienteste Attacke.. viel besser ist da eine Wörterbuch-Attacke, aber abgesehn davon gibt es ja noch verschiedene andere Möglichkeiten Algorithem zu Analysieren und Schwachstellen zu finden über die die Chiffrierung auch ohne Kenntniss des Schlüssels geknackt werden können..!

Und wie gesagt, wenn du deinen Code hier reinstellst schau ich ihn mir gerne mal an.. aber wie gesagt geht man bei einer Kryptanalyse davon aus, dass der Angreifer bestens über den Algo und die Implementierung bescheid weiß..! Bei einem perfekten Algorithmus liegt die Sicherheit nur beim Schlüssel! Soll heißen ein Angreifer kann alle Details über den Algo haben, beliebig viel Chiffre-Text mit dazugehörigem Klartext, aber die effizienteste Attacke ist immer noch eine Brute-Force-Attacke...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: So 06.06.04 21:05 
Ich hoff ich zerstör hier jetz nich dein Lebenswerk aber deine "Verschlüsselung" denk ich "geknackt" zu haben... Hab einfach einen "Known-Plaintext Angriff" durchgeführt. Dazu brauchte ich nich mal deine Exe anzuschauen (nur doppelzuklicken):
Dein Ciphertext umfasst lediglich Zeichen von $41 - $FF. Zum Verschlüsseln wird einfach der Schlüssel zum Plaintext hinzuaddiert. Zum Entschlüsseln eben subtrahiert. Was mir jetzt noch fehlt ist die Schlüsselgeneration. An den komm ich aber nur wenn ich deine Exe ent-upxt hab, was aber kein Problem darstellen dürfte. Das mach ich aber (frühestens) morgen. Jetzt widme ich mich aber erst mal einer kleinen Silberscheibe mit dem Aufdruck "Kill Bill" ;-)

raziel

_________________
JSXGraph
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mo 07.06.04 16:06 
Muss was richtigstellen: Der ASCII-Bereich der einzelnen Ciphertext Zeichen geht nicht von $41 bis $FF, sondern von $0 bis $FF... aber ansonsten stimmt alles: Die Verschlüsselung ist einfach:
ausblenden Delphi-Quelltext
1:
2:
for i := 1 to length(plaintext) do
  ciphertext[i] := (plaintext[i] + key[i]) mod 256;


raziel

ps: der schlüssel bereitet mir noch kopfschmerzen... :( aber das wird sich hoffentlich nach dem deUPXen legen...

_________________
JSXGraph
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.06.04 16:44 
Wenn ich mich nicht irre liegt die Fkt für den nächsten Schlüssel bei "$004534D8"

//Edit:

Vielleicht auch eher "$00404890"

//Edit2:

Vielleicht auch doch keins von Beidem :P
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 11.06.04 12:27 
UPX mag mich nich... kriegs nich entpackt. Hab auch langsam keine Lust mehr.
Bisherige Ergebnisse über den Schlüssel:
Offensichtlich wird bei Passwörtern mit gerader Länge einfach der Schlüssel wie folgt berechnet:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  key, password: String;
  keykey: Byte;   // Der schlüssel zum verschlüsseln des passworts in den schlüssels...
{...}
key := password;
keykey := Ord(password[(length(password) div 2)+1)]) - Ord(password[1]);
repeat
  for i := 1 to length(password) do
  begin
    key := key + Chr(Ord(password[i]) + keykey);
  end;
until (length(key) >= length(plaintext));


Aber wie das bei ungeraden Schlüsseln geht hab ich noch nicht rausgefunden... :(
Hier ein Beispiel (Hex):
ausblenden Quelltext
1:
2:
3:
48 45 4C 4C 4F F6 F3 FA FA FD A4 A1 A8 A8 AB 52
4F 56 56 59 00 FD 04 04 07 AE AB B2 B2 B5 5C 59
60 60 63 0A 07 0E 0E 11 B8 B5 BC BC BF 66 63 6A

Das Passwort war: "HELLO" (48 45 4C 4C 4F)
Wer Lust hat zu tüfteln und was rauskriegt > PN ;-)

Weil ich das (noch) nicht knacken konnte, heißt das aber noch lange nicht, dass das sicher ist!!
FAlter hat folgendes geschrieben:
Es basiert zwar nicht auf XOR-Basis, hat aber mit dem OTP trotzdem gewisse Ähnlichkeit.

Ich würde es weniger mit OTP als eher mit Vigenere vergleichen. Warum? Die Sicherheit von OTP basiert darauf, dass der Schlüssel komplett durch einen echten Zufall erzeugt wird. Das ist bei Dir nicht der Fall. Eher ist es bei Dir so, dass du aus einem Passwort (nicht per Zufall generiert) einen Schlüssel "streckst" - genau wie bei Vigenere.

raziel

_________________
JSXGraph
Motzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 11.06.04 12:45 
Ist auch ganz enfach.. wenn du schaust wiederholt sich das Schema des Passwortes immer wieder:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
48 45 4C 4C 4F
F6 F3 FA FA FD
A4 A1 A8 A8 AB
52 4F 56 56 59
00 FD 04 04 07
AE AB B2 B2 B5
5C 59 60 60 63
0A 07 0E 0E 11
B8 B5 BC BC BF
.....

Die Differenz zwischen den Zeilen beträgt in dem Fall immer konstant $52:
$48 - $52 (mod $FF) = $F6
$F6 - $52 (mod $FF) = $A4
$A4 - $52 (mod $FF) = $52
...

Ich nehm an diese $52 werden auch noch irgendwie berechnet, aber ich hab mir das Prog noch nicht angeschaut...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 11.06.04 12:53 
So weit war ich auch schon, aber WIE ich auf diesen "keykey" komm is mir immer noch ein Rätsel... ;-)

_________________
JSXGraph
Motzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 11.06.04 12:55 
Hm.. prog durch den Disassembler schicken und angucken.. ;)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 11.06.04 12:57 
Wird mir wohl nix anderes mehr übrigbleiben... :( *OllyDbganwerf*

_________________
JSXGraph
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 11.06.04 13:49 
obbschtkuche hat folgendes geschrieben:
Wenn ich mich nicht irre liegt die Fkt für den nächsten Schlüssel bei "$004534D8"
//Edit:
Vielleicht auch eher "$00404890"


bei $004534D8 ziemlich sicher nich, weil das noch die UPX entpack routinen sind... $00404890 schon eher. Mein ProcDump will nich (WinXP gar net und Win98 is die gedumpte exe fehlerhaft...), deshalb muss ich zu fuß übern ODBG und ndisasm gehen... :( Win32DisAsm will au nimmer, liegt wohl am dump :bawling:

// edit :autsch: wieso einfach wenns kompliziert auch geht... "upx -d faltercrypt.exe"...

raziel

_________________
JSXGraph
Motzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 11.06.04 14:00 
Vorschlag @ FAlter: du postest deinen Code und einen ~400 Zeichen langen verschlüsselten Text (ohne Passwort) und ich leg dir den entschlüsselten Text plus Passwort vor..! Musst mir nur ein paar Tage Zeit geben weil ich momentan Uni-bedingt nicht so viel Zeit hab...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.06.04 14:02 
raziel hat folgendes geschrieben:
bei $004534D8 ziemlich sicher nich, weil das noch die UPX entpack routinen sind... $00404890 schon eher.


Ich war von der entpackten exe ausgegangen :roll:
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 11.06.04 15:15 
obbschtkuche hat folgendes geschrieben:
Ich war von der entpackten exe ausgegangen :roll:

ich von der nicht-entpackten. wusste nicht dass es bei upx auch ne unpack funktion gibt... :?
aber dank exe2dpr kann ich mit ziemlicher sicherheit sagen, dass die verschlüsselungsprozedur bei $00453CAC liegt!

raziel

_________________
JSXGraph
FAlter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 192

Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
BeitragVerfasst: Fr 11.06.04 17:26 
Motzi hat folgendes geschrieben:
Vorschlag @ FAlter: du postest deinen Code und einen ~400 Zeichen langen verschlüsselten Text (ohne Passwort) und ich leg dir den entschlüsselten Text plus Passwort vor..! Musst mir nur ein paar Tage Zeit geben weil ich momentan Uni-bedingt nicht so viel Zeit hab...


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
¥þúêçã¦ÐàñâÔÓÛ—Á®ÆL»È´U«­¡´R…Ÿ’” -‘}r™*^ws^…FhUJqG?òæLA0G7$ö#(6Åäû!òíüáâàæëŒç׿ÒÌO侫¾¾d¢¢¤ª¥•¸[);iˆ©9I’ˆw”%Xregsc H[FnT-S=ëM2$AãÎ'Ã##ÀÓô¬ßùìîúê‡ÏâÍõÛ´ÚÄ`w´¤Æµ¤Ç¥’¥cK©‰L‡€–4XŠwheav`Rq`@K@g÷=G,Jã-2A*á·¨ýª  
þÄÐÞùçä°ØÔãÏ×ÞÓzƒ¼³Ô´Ÿ±¯¡t­ ž‹`v{Š†wž„lz}i‡kSdd
hP;^GHüÜF46S  (Ù, ÎùþêºõîõÖøÄúÔÑéÊÏÜzÃÓu®Õ¹©¯­¡´ OV€Š >q‹sŒxfnv^E`UhG?A6^í
D8$I+âø´öéñîºáÍ÷çÚ¦ÎÊàؽÞÁ©Ç|dÓ®=O¯™¯M–¦Hr›‹{€|mpYw.d`RBElH-V>ëU-?ã7'"3öÄ ø à”…èçÍðêÈóÉs×øßp“¹´«¾ªK¤ ¸‰Lv†—ˆzyh=ibx0k_KbH>]=æI<;(5˼%#¾œýïê¹€ÒØË—ÒÇî¥ÈÃÂͽ¡°¨Ÿt› ¥‹²Ce–„†£ppx*m|`\[SrLC 6;Y?á;7'O$ ÏÃ7& ¶î¥ëÖùâã«ÂÂêÝ}ØƼ~¨¬Ë¸ž°µ¨Ã/„¡MŸƒB]n›obpx_Y_c_tI6HB?ÚÆ%2"ö-,È% ü#úç
¸ ÞØíëŒêÒ½·ÇØÉ»ºÂ©~¥™ª¯P¿›–šª|—ˆ4/XreTfN``IiK-MA@Ê=×1)*ñ$ôÄ ïã°ìé
ïÌàØ١׸ÔÁÆá]I¹½²Í¡—¬«e—{‘•7«‰vüƒ}‰iRlT{cJbI@c=æ,?<H-!;Þ-BÏ&""︱‘¸ðë–õÜÐÜÛ‚öÔÁHÎÈÔ´·fŸÆ®•­”‹®ˆGn~¡vg*e}g^dd
~\IÏVP\<%?í&E$ºÌ.§ Î þ' ì ýêöÖôÃðÕÂÞ׋„dÃÇi¤»©¹³U³›†©’”[n‘€ˆwfsx{WKnVYP:IEE 4¹Dè:""ⶪç÷ô¬ïþâÞ¡ÀÍøÍÏÎÖ½’Ĩ¾Âd´¦¢²3—¯›¤‹„}m‹@(†nY)di€THPAméÕ#=:[=222×6Ø -  ü¬àþûî
ÝÏáá“¡ÉƈҸÖp£¹¹­…\©œžªHy‘•Œ™yq%d’fid]nYúWYJW÷-=;9M¨&;(2¾#+»  ý‰ûð÷ëÙøØЗ¶ÃêóÏÈnÌ°­\P{É«•­¥R`–wŒwž/C…pú„gQd^SpM;YET84öA'E-5Ù-þ# ùí  ’©ØÖøñãðâÂä—j FÐuœÆ®®¦£o“V‘†­>T‡Œ‚•nasnm?I_^JØCVBC =!7;Ü;Ý% Éù"žŠãôâÞô˜ÔçÏÌÒØxÖº¶y‘¹Ò°¢e±ž¯–Š˜™z‚s–3NbY|dOTA`Q1U÷1XÕÁ3À*ñ
Ïù#û

úâ°ý꘷âßÐäÌÇÍÍ´¨¹k¹Î®K…©ª‘z”˜…˜4g}‚'VTvoajSNj^@XC,Oò=P2Ò*$&<+»Ìúïûëùé–ÜÐÛ{l¤ª¯Õ¾·Ö¬¦Â¶ À ‰£¦‹®L@


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
unit UFalterCrypt;

interface

procedure EnCrypt(var S: Stringconst PW: Stringconst D: Integer);
procedure DeCrypt(var S: Stringconst PW: Stringconst D: Integer);
function PWSum(const PW: String): Int64;

implementation

procedure EnCrypt(var S: Stringconst PW: Stringconst D: Integer);
var
  i, L1, L2, LS: Integer;
  T: Int64;
begin
  L1 := Length(S);
  L2 := Length(PW);
  if L1 <= L2 then
    LS := L1
  else
    LS := L2;
  for i := 1 to LS do
  begin
    T := Byte(S[i]) + Byte(PW[i]) + D;
    //while T > 255 do
    //  dec(T, 255);
    T := T mod 255;
    S[i] := Chr(T);
  end;
end;

procedure DeCrypt(var S: Stringconst PW: Stringconst D: Integer);
var
  I, L1, L2, LS: Integer;
  T: Int64;
begin
  L1 := Length(S);
  L2 := Length(PW);
  if L1 <= L2 then
    LS := L1
  else
    LS := L2;
  for i := 1 to LS do
  begin
    T := Byte(S[i]) - Byte(PW[i]) - D;
    while T < 0 do
      inc(T, 255);
    S[i] := Chr(T);
  end;
end;

function PWSum(const PW: String): Int64;
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(PW) do
    if i Mod 2 = 0 then
      inc(Result, Byte(PW[i]))
    else
      dec(Result, Byte(PW[i]));
end;

end.

unit UCrypt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl, ComCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    GroupBox2: TGroupBox;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    GroupBox3: TGroupBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    GroupBox4: TGroupBox;
    ProgressBar1: TProgressBar;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    Abbrechen: Boolean;
    procedure AddProgress(const A: Int64);
    function Check: Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R XPManifest.res}

uses
  UFalterCrypt;

procedure TForm1.AddProgress(const A: Int64);
var
  X: Integer;
begin
  X := ProgressBar1.Position + A;
  Label4.Caption := FloatToStrF(X * 100 / ProgressBar1.Max, ffFixed, 41) +
    ' %';
  ProgressBar1.Position := X;
  Application.ProcessMessages;
end;

function TForm1.Check: Boolean;
begin
  if not FileExists(OpenDialog1.FileName) then
  begin
    Application.MessageBox('Sie müssen eine existierende Datei wählen!',
      'Dateifehler', MB_OK + MB_ICONSTOP);
    Result := false;
    exit;
  end;
  if Edit1.Text <> Edit2.Text then
  begin
    Application.MessageBox('Das Passwort wurde nicht korrekt bestätigt.',
      'Passwortfehler', MB_OK + MB_ICONINFORMATION);
      Edit2.SetFocus;
      Result := false;
      exit;
  end;
  if Edit1.Text = '' then
  begin
    Application.MessageBox('Das Passwort darf nicht leer sein',
      'Passwortfehler', MB_OK + MB_ICONINFORMATION);
    Edit1.SetFocus;
    Result := false;
    exit;
  end;
  Button1.Enabled := false;
  Button2.Enabled := false;
  Button3.Enabled := false;
  Button4.Enabled := true;
  Edit1.Enabled := false;
  Edit2.Enabled := false;
  Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Label1.Caption:=MinimizeName(OpenDialog1.FileName, Label1.Canvas,
      Label1.Width);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Abbrechen := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Stream: TFileStream;
  PW: String;
  PWLength, LastLength: Integer;
  Pos, Durchl, ps: Int64;
  Bytes: String;
begin
  if not Check then exit;
  ProgressBar1.Position := 0;
  Application.ProcessMessages;
  Abbrechen := false;
  PW := Edit1.Text;
  PWLength := Length(PW);
  Pos := 0;
  Durchl := 0;
  ps := PWSum(PW);
  Stream := TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
  try
    ProgressBar1.Max := Stream.Size;
    SetLength(Bytes, PWLength);
    while Stream.Size - Pos >= PWLength do
    begin
      Stream.Read(Bytes[1], PWLength);
      EnCrypt(Bytes, PW, Durchl);
      AddProgress(PWLength);
      Stream.Seek(Pos, soFromBeginning);
      Stream.Write(Bytes[1], PWLength);
      inc(Pos, PWLength);
      inc(Durchl, ps);
      Application.ProcessMessages;
      if Abbrechen then exit;
    end;
    LastLength := Stream.Size - Pos;
    if LastLength = 0 then exit;
    SetLength(Bytes, LastLength);
    Stream.Read(Bytes[1], LastLength);
    EnCrypt(Bytes, PW, Durchl);
    ProgressBar1.Position := ProgressBar1.Max;
    Label4.Caption := '100,0 %';
    Application.ProcessMessages;
    Stream.Seek(Pos, soFromBeginning);
    Stream.Write(Bytes[1], LastLength);
  finally
    Stream.Free;
    Button1.Enabled := true;
    Button2.Enabled := true;
    Button3.Enabled := true;
    Button4.Enabled := false;
    Edit1.Enabled := true;
    Edit2.Enabled := true;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  Stream: TFileStream;
  PW: String;
  PWLength, LastLength: Integer;
  Pos, Durchl, ps: Int64;
  Bytes: String;
begin
  if not Check then exit;
  ProgressBar1.Position := 0;
  Application.ProcessMessages;  
  Abbrechen := false;
  PW := Edit1.Text;
  PWLength := Length(PW);
  Pos := 0;
  Durchl := 0;
  ps := PWSum(PW);
  Stream := TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
  try
    ProgressBar1.Max := Stream.Size;
    SetLength(Bytes, PWLength);
    while Stream.Size - Pos >= PWLength do
    begin
      Stream.Read(Bytes[1], PWLength);
      DeCrypt(Bytes, PW, Durchl);
      AddProgress(PWLength);
      Stream.Seek(Pos, soFromBeginning);
      Stream.Write(Bytes[1], PWLength);
      inc(Pos, PWLength);
      inc(Durchl, ps);
      Application.ProcessMessages;
      if Abbrechen then exit;
    end;
    LastLength := Stream.Size - Pos;
    if LastLength = 0 then exit;
    SetLength(Bytes, LastLength);
    Stream.Read(Bytes[1], LastLength);
    DeCrypt(Bytes, PW, Durchl);
    ProgressBar1.Position := ProgressBar1.Max;
    Label4.Caption := '100,0 %';
    Application.ProcessMessages;
    Stream.Seek(Pos, soFromBeginning);
    Stream.Write(Bytes[1], LastLength);
  finally
    Stream.Free;
    Button1.Enabled := true;
    Button2.Enabled := true;
    Button3.Enabled := true;
    Button4.Enabled := false;
    Edit1.Enabled := true;
    Edit2.Enabled := true;
  end;
end;

end.


Hab mir noch keine Zeit zum optimieren genommen...

PS: Hoffe, ihr braucht die dpr nicht :D

Moderiert von user profile iconPeter Lustig: Quote- durch Code-Tags ersetzt, um scrolling zu aktivieren
Motzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 11.06.04 17:29 
Post den Chiffre-Text lieber im Hex-Format... werd mir das genauer anschaun wenn ich genug Zeit dazu find..!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 11.06.04 17:46 
FAlter hat folgendes geschrieben:
PS: Hoffe, ihr braucht die dpr nicht :D

Hab se schon, dank exe2dpr ;-)

_________________
JSXGraph