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
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
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) 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
|
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:
| var key, 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 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
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 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
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
|
|
|