| 
| Autor | Beitrag |  
| FAlter 
          Beiträge: 192
 
 Win XP Home
 Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
 
 | 
Verfasst: So 06.06.04 17: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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: So 06.06.04 17: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. 
          Beiträge: 20451
 Erhaltene Danke: 2264
 
 Win 10
 C# (VS 2019)
 
 | 
Verfasst: So 06.06.04 17: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 
          Beiträge: 192
 
 Win XP Home
 Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
 
 | 
Verfasst: So 06.06.04 18:02 
 
Hier!	  | 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
 | 
 |  |  |  
| Motzi  
          Beiträge: 2931
 
 XP Prof, Vista Business
 D6, D2k5-D2k7 je Prof
 
 | 
Verfasst: So 06.06.04 19: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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: So 06.06.04 20: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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Mo 07.06.04 15: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:
 		                       Delphi-Quelltext 
 									| 1:2:
 
 | for i := 1 to length(plaintext) dociphertext[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
 
 
 
 
 | 
Verfasst: Mo 07.06.04 15: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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Fr 11.06.04 11: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:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 
 | varkey, password: String;
 keykey: Byte;
 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):
 		                       Quelltext 
 									| 1:2:
 3:
 
 | 48 45 4C 4C 4F F6 F3 FA FA FD A4 A1 A8 A8 AB 524F 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  
          Beiträge: 2931
 
 XP Prof, Vista Business
 D6, D2k5-D2k7 je Prof
 
 | 
Verfasst: Fr 11.06.04 11:45 
 
Ist auch ganz enfach.. wenn du schaust wiederholt sich das Schema des Passwortes immer wieder:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | 48 45 4C 4C 4FF6 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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Fr 11.06.04 11:53 
 
So weit war ich auch schon, aber WIE ich auf diesen "keykey" komm is mir immer noch ein Rätsel...  _________________JSXGraph |  |  |  
| Motzi  
          Beiträge: 2931
 
 XP Prof, Vista Business
 D6, D2k5-D2k7 je Prof
 
 | 
Verfasst: Fr 11.06.04 11: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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Fr 11.06.04 11:57 
 
Wird mir wohl nix anderes mehr übrigbleiben...    *OllyDbganwerf*_________________JSXGraph |  |  |  
| raziel 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Fr 11.06.04 12: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    // edit    wieso einfach wenns kompliziert auch geht... "upx -d faltercrypt.exe"...
 raziel_________________JSXGraph |  |  |  
| Motzi  
          Beiträge: 2931
 
 XP Prof, Vista Business
 D6, D2k5-D2k7 je Prof
 
 | 
Verfasst: Fr 11.06.04 13: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
 
 
 
 
 | 
Verfasst: Fr 11.06.04 13: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    |  |  |  
| raziel 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Fr 11.06.04 14:15 
 
	  | obbschtkuche hat folgendes geschrieben: |  	  | Ich war von der entpackten exe ausgegangen  | 
 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 
          Beiträge: 192
 
 Win XP Home
 Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
 
 | 
Verfasst: Fr 11.06.04 16: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... | 
 		                       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|`\[SrLC6;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:IEE4¹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@
 |  												| 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: String; const PW: String; const D: Integer);
 procedure DeCrypt(var S: String; const PW: String; const D: Integer);
 function PWSum(const PW: String): Int64;
 
 implementation
 
 procedure EnCrypt(var S: String; const PW: String; const 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;
 T := T mod 255;
 S[i] := Chr(T);
 end;
 end;
 
 procedure DeCrypt(var S: String; const PW: String; const 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
 
 Abbrechen: Boolean;
 procedure AddProgress(const A: Int64);
 function Check: Boolean;
 public
 
 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, 4, 1) +
 ' %';
 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    Moderiert von  Peter Lustig: Quote- durch Code-Tags ersetzt, um scrolling zu aktivieren |  |  |  
| Motzi  
          Beiträge: 2931
 
 XP Prof, Vista Business
 D6, D2k5-D2k7 je Prof
 
 | 
Verfasst: Fr 11.06.04 16: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 
          Beiträge: 2453
 
 Arch Linux
 JS (WebStorm), C#, C++/CLI, C++ (VS2013)
 
 | 
Verfasst: Fr 11.06.04 16:46 
 
	  | FAlter hat folgendes geschrieben: |  	  | PS: Hoffe, ihr braucht die dpr nicht  | 
 Hab se schon, dank exe2dpr  _________________JSXGraph |  |  |  |