Quelltexte/ Codesnippets | | | | Hubert Binnewies | Hallo zusammen...
Ich weiss...euch Profan Profis erzähle ich nix neues, aber für nen Anfänger könnte das hier interessant sein (bin schliesslich selber ein Anfänger).
Ich bin in die Verlegenheit gekommen einige Strings verschlüsselt zu speichern um sie vor neugierigen Augen zu schützen. Darum habe ich diese Routine geschrieben. Sie ist nicht unknackbar, aber die meisten werden einen Disassambler brauchen um darauf zu kommen.
Erstmal die Speicherroutine:
Ein möglicher Aufruf wäre KompilierenMarkierenSeparierenSpeichern "Daten.dat", String1$,String2$,String3$,String4$,String5$,Zahl1%,Zahl2%,Zahl3%,Zahl4%,Zahl5%
Wobei die 5 Zahlen der weiteren Verschlüsselung dienen und erstens Integer und zweitens im Bereich zwischen 1 und etwa 65400 liegen sollten. Und die 5 Strings sollten eine maximal Länge von 200 nicht überschreiten (etwas länger geht schon aber dann wirds entschlüsselbar) und bei etwa 235 plus minus ein paar ist ganz Schluss.
Hier die Speicher Routine: KompilierenMarkierenSeparieren
Proc Speichern
Parameters Dateiname$, Var1$, Var2$, Var3$, Var4$, Var5$, Var1%, Var2%, Var3%, Var4%, Var5%, Dateiname$
Declare Anzahl%, Datei%, Zähler1%, Zähler2%, Dummy$, Dummy1$, Dummy%, Dummy1%
Anzahl%=Len(Var1$)+Len(Var1$)+Len(Var1$)+Len(Var1$)+Len(Var1$)
Randomize
Declare Zufall#[Anzahl%+1], Datei#
Struct Zufallnr = Nummer%
Dim Zufall#[], Zufallnr
Dim Datei#,1024
Zufall#[0].Nummer%=@Rnd(500-(Anzahl%*2))+12+(Anzahl%*2)
Zufall#[0].Nummer%=Zufall#[0].Nummer%*2
Zähler1%=0
Whileloop Anzahl%+1
Inc Zähler1%
Dummy1%=0
Whilenot Dummy1%
Dummy1%=1
Dummy%=Rnd(500-(Anzahl%*2))+12+(Anzahl%*2)
Dummy%=Dummy%*2
Zähler2%=0
Whileloop Anzahl%+1
If Dummy%=Zufall#[Zähler2%].Nummer%
Dummy1%=0
endif
Inc Zähler2%
Endwhile
Endwhile
Zufall#[Zähler1%].Nummer%=Dummy%
Endwhile
Whileloop 512
Word Datei#,(&Loop-1)*2,Rnd(65533)
Endwhile
Word Datei#,0 = Len(Var1$)+Var1%,Len(Var2$)+Var2%,Len(Var3$)+Var3%,Len(Var4$)+Var4%,Len(Var5$)+Var5%
Whileloop Anzahl%+1
Word Datei#,(&Loop-1)*2+10,Zufall#[&Loop-1].Nummer%+&Loop
Endwhile
Dummy$=Var1$+Var2$+Var3$+Var4$+Var5$
Whileloop Anzahl%+1
Dummy1$=@Mid$(Dummy$,&loop-1,1)
Dummy%=@Ord(Dummy1$)+&Loop
Word Datei#,Zufall#[&loop-1].Nummer%,Dummy%
Endwhile
Assign #1, Dateiname$
OpenRW #1
BlockWrite #1, Datei#, 0, 1024
CloseRW #1
Endproc
Diese Routine erzeugt eine Datei von exakt einem Kilobyte die Hauptsächlich mit Zufallswerten gefüllt wird zwischen denen die Nutzwerte durcheinandergewürfelt und verändert versteckt sind.
Natürlich muss man das auch wieder auseinanderpflücken können:
Ein möglicher Aufruf: KompilierenMarkierenSeparierenLaden "Daten.dat",Nummer1%, Nummer2%, Nummer3%, Nummer4%, Nummer5%
Wobei diese 5 Nummern die eben oben beschriebenen sind
Hier die Laderoutine: KompilierenMarkierenSeparieren___________ In Diesen Variablen sind nach Proc Aufruf die in der Datei
___________ gespeicherten Strings
Declare Var1$, Var2$, Var3$, Var4$, Var5$
_________________________________________________________________________________________
Proc Laden
Parameters Dateiname$, Var1%, Var2%, Var3%, Var4%, Var5%
Declare Datei#, Dummy%, Varl1%, Varl2%, Varl3%, Varl4%, Varl5%, Dummy1$, Dummy2$, Anzahl%
Dim Datei#, 1024
Assign #1, Dateiname$
OpenRW #1
Dummy% = @BlockRead(#1, Datei#, 0, 1024)
CloseRW #1
Varl1%=@Word(Datei#,0)-Var1%
Varl2%=@Word(Datei#,2)-Var2%
Varl3%=@Word(Datei#,4)-Var3%
Varl4%=@Word(Datei#,6)-Var4%
Varl5%=@Word(Datei#,8)-Var5%
Anzahl%=Varl1%+Varl2%+Varl3%+Varl4%+Varl5%
Declare Zufall#[Anzahl%]
Struct Zufallnr = Nummer%
Dim Zufall#[], Zufallnr
Whileloop Anzahl%+1
Zufall#[&Loop-1].Nummer%=@Word(Datei#,(&Loop-1)*2+10)
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-&Loop
Endwhile
Whileloop Anzahl%
Dummy1$=@chr$(@Word(Datei#,Zufall#[&Loop].Nummer%)-&Loop-1)
Dummy2$=Dummy2$+Dummy1$
endwhile
Whileloop Varl1%
Dummy1$=@Mid$(Dummy2$,&Loop,1)
Var1$=Var1$+Dummy1$
Endwhile
Whileloop Varl2%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%,1)
Var2$=Var2$+Dummy1$
Endwhile
Whileloop Varl3%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%+Varl2%,1)
Var3$=Var3$+Dummy1$
Endwhile
Whileloop Varl4%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%+Varl2%+Varl3%,1)
Var4$=Var4$+Dummy1$
Endwhile
Whileloop Varl5%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%+Varl2%+Varl3%+Varl4%,1)
Var5$=Var5$+Dummy1$
Endwhile
Endproc
Viel Spass damit |
| | | WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 23.04.2006 ▲ |
| |
| | Jac de Lad | Ist doch niedlich, probier ich gleich aus!
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 23.04.2006 ▲ |
| |
| | Frank Abbing | Schöne Arbeit .
In dem Zusammenhang meinen Verschlüsselungscode aus den XPIA Beispielen. Er richtet sich in erster Linie aber an User mit erweiteren Programmkenntnissen, für die Geschwindigkeit wichtig ist zusammen mit einem relativ sicheren Passwortschutz. KompilierenMarkierenSeparierenSuperschnelles XOR-Verschlüsselungs-Verfahren mit Passwortschutz.
Entliehen aus meiner ProSpeed.dll
{$cliq}
Declare text$,passwort$,nurso$
text$="Zunächst einmal: Für Assembler benötigt man keine grosse Anzahl von Befehlen, mit 10 Befehlen "
text$=text$+"(insgesamt gibt es über 90) ist man schon gut bedient, alles andere ist unnütz, weil der "
text$=text$+"MASM32 Assembler High-Level-Syntax (.while / .endw / .if / .endif usw.) unterstützt."
text$=text$+"Und davon ist einem Profan-User schon das meiste bekannt."
passwort$="Ganz geheimes Passwort."
Window 0,0-%maxx,%maxy
Print "Originaltext:"
Print
Color 7,15
Print text$
Color 0,15
Print
Print
ASM-Block
Crypt(), eine XOR-Verschlüsselung mittels Passwort
Übernommen aus meiner ProSpeed.dll
Parameter:
1) para1 = Bereichsvariable oder String, in der die Daten gespeichert sind.
2) para2 = Anzahl zu verschlüsselnder Bytes
3) para3 = Pointer auf einen String (oder Bereich), in dem das Passwort gespeichert ist
4) para4 = Länge des Passworts
Beim zweiten Aufruf mit den gleichen Parametern wird der ursprung wieder hergestellt.
AsmStart Crypt
Parameters addr(text$),Len(text$),addr(passwort$),Len(passwort$)
mov ecx,para2
mov edx,para1
mov ebx,para3
mov esi,para4
mov edi,0
schleife:
mov al,[edx]
xor al,[ebx+edi]
mov [edx],al
inc edx
inc edi
cmp esi,edi
jne sprung
mov edi,0
sprung:
sub ecx,1
jne schleife
AsmEnd
Print "Verschlüsselter Text:"
Print
Color 7,15
Print text$
Color 0,15
Print
Print
Jetzt kommt eine Besonderheit...
Wir rufen unseren ersten ASM-Block ein zweites mal auf !!! Ohne Prozedure !
xpia$ ist der Name unserer kompletten Assemblerlibrary.
Crypt ist hier der Name des Assemblerblocks, danach folgen etventuelle Parameter.
Dabei ist es sogar egal, ob der zweite Aufruf nach dem Assemblerblock erfolgt oder schon davor !
Wer das jetzt nicht verstanden hat, der sollte den ASM-Block Crypt lieber in eine Profan-Prozedure
packen, und stattdessen lieber die Prozedure aufrufen. Aber so wie hier geht es auch.
External(xpia$,"Crypt",addr(text$),Len(text$),addr(passwort$),Len(passwort$))
Print "Und der wieder hergestellte Text:"
Print
Color 7,15
Print text$
WaitInput
End
|
| | | | |
| | Hubert Binnewies | @Frank
Auch nicht schlecht.....sogar goil würde ich sagen.... Nur ich verwürfel das ganze noch in einer datei...womit ein cracker vor 3 probleme gestellt wird.. erstens: wie lang sind die strings.. wo sind die zeichen in der datei und in welcher reihenfolge....das erste ist kein prob...das steht am anfang der datei, das blöde ist nur das hier genau die zusätzlichen verschlüsselungszahlen addiert wurden...denn erst daraus ergibt sich erst wie lang das Feld der Positionszahlen ist womit sich die Positionen der Zeichen und deren Reihenfolge ergibt.....also nicht ganz so einfach...
Aber mal im ernst....es würde echt Sinn machen deine Routine vor meiner zu setzen und schon wird es echt lustig fürn cracker....was meinste...ob ihm die Haare schneller nachwachsen als der sich die Rauft???.... |
| | | WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 23.04.2006 ▲ |
| |
| | Hubert Binnewies | Mir ist noch was eingefallen um die Positionen der Zeichen zu verschleiern...da werde ich mich morgen mal dransetzen...und dann wird es noch was sicherer...
Aber mal ne frage......wieso ist mein Beitrag hier verschoben worden...den habe ich doch unter einsteigerfragen / Programmierung reingesetzt....wenn ich was suche schaue ich immer zuerst darein....unter den codesnippets findet das doch keiner.... |
| | | WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 23.04.2006 ▲ |
| |
| | | [quote:b53fcb60e0=Hubert Binnewies]Aber mal ne frage......wieso ist mein Beitrag hier verschoben worden...den habe ich doch unter einsteigerfragen / Programmierung reingesetzt....wenn ich was suche schaue ich immer zuerst darein....unter den codesnippets findet das doch keiner....[/quote:b53fcb60e0]Bitte im Stammtisch posten, hier würde keiner nach der Antwort suchen. Immer schön beim Thema bleiben. ( Regeln ) |
| | | | |
| | Hubert Binnewies | Hallo zusammen....
Ich habe die Routinen noch was verfeinert, nun sind auch noch die Positionszahlen verschlüsselt so das ein Cracker auf jeden fall disassmblieren muss damit er die die 5 zusätzlichen Zahlen erhält...sonst würde er noch nicht mal die Positionen der Zeichen herausbekommen..
Hier die Speicher Routine: KompilierenMarkierenSeparieren
Proc Speichern
Parameters Dateiname$, Var1$, Var2$, Var3$, Var4$, Var5$, Var1%, Var2%, Var3%, Var4%, Var5%, Dateiname$
Declare Anzahl%, Datei%, Zähler1%, Zähler2%, Dummy$, Dummy1$, Dummy%, Dummy1%
Anzahl%=Len(Var1$)+Len(Var1$)+Len(Var1$)+Len(Var1$)+Len(Var1$)
Randomize
Declare Zufall#[Anzahl%+1], Datei#
Struct Zufallnr = Nummer%
Dim Zufall#[], Zufallnr
Dim Datei#,1024
Zufall#[0].Nummer%=@Rnd(500-(Anzahl%*2))+12+(Anzahl%*2)
Zufall#[0].Nummer%=Zufall#[0].Nummer%*2
Zähler1%=0
Whileloop Anzahl%+1
Inc Zähler1%
Dummy1%=0
Whilenot Dummy1%
Dummy1%=1
Dummy%=Rnd(500-(Anzahl%*2))+12+(Anzahl%*2)
Dummy%=Dummy%*2
Zähler2%=0
Whileloop Anzahl%+1
If Dummy%=Zufall#[Zähler2%].Nummer%
Dummy1%=0
endif
Inc Zähler2%
Endwhile
Endwhile
Zufall#[Zähler1%].Nummer%=Dummy%
Endwhile
Whileloop 512
Word Datei#,(&Loop-1)*2,Rnd(65533)
Endwhile
Word Datei#,0 = Len(Var1$)+Var1%,Len(Var2$)+Var2%,Len(Var3$)+Var3%,Len(Var4$)+Var4%,Len(Var5$)+Var5%
Dummy$=Var1$+Var2$+Var3$+Var4$+Var5$
Whileloop Anzahl%+1
Dummy1$=@Mid$(Dummy$,&loop-1,1)
Dummy%=@Ord(Dummy1$)+&Loop
Word Datei#,Zufall#[&loop-1].Nummer%,Dummy%
Endwhile
Zähler1%=1
Whileloop Anzahl%+1
If Zähler1%=1
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%+Var1%
Endif
If Zähler1%=2
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%+Var2%
Endif
If Zähler1%=3
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%+Var3%
Endif
If Zähler1%=4
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%+Var4%
Endif
If Zähler1%=5
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%+Var5%
Endif
Inc Zähler1%
If Zähler1%=6
Zähler1%=1
Endif
Endwhile
Whileloop Anzahl%+1
Word Datei#,(&Loop-1)*2+10,Zufall#[&Loop-1].Nummer%+&Loop
Endwhile
Assign #1, Dateiname$
OpenRW #1
BlockWrite #1, Datei#, 0, 1024
CloseRW #1
Endproc
Und hier die Laderoutine: KompilierenMarkierenSeparieren___________ In Diesen Variablen sind nach Proc Aufruf die in der Datei
___________ gespeicherten Strings
Declare Var1$, Var2$, Var3$, Var4$, Var5$
_________________________________________________________________________________________
Proc Laden
Parameters Dateiname$, Var1%, Var2%, Var3%, Var4%, Var5%
Declare Datei#, Dummy%, Varl1%, Varl2%, Varl3%, Varl4%, Varl5%, Dummy1$, Dummy2$, Anzahl%, Zähler%
Dim Datei#, 1024
Assign #1, Dateiname$
OpenRW #1
Dummy% = @BlockRead(#1, Datei#, 0, 1024)
CloseRW #1
Varl1%=@Word(Datei#,0)-Var1%
Varl2%=@Word(Datei#,2)-Var2%
Varl3%=@Word(Datei#,4)-Var3%
Varl4%=@Word(Datei#,6)-Var4%
Varl5%=@Word(Datei#,8)-Var5%
Anzahl%=Varl1%+Varl2%+Varl3%+Varl4%+Varl5%
Declare Zufall#[Anzahl%]
Struct Zufallnr = Nummer%
Dim Zufall#[], Zufallnr
Whileloop Anzahl%+1
Zufall#[&Loop-1].Nummer%=@Word(Datei#,(&Loop-1)*2+10)
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-&Loop
Endwhile
Zähler%=1
Whileloop Anzahl%+1
IF Zähler%=1
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-Var1%
Endif
IF Zähler%=2
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-Var2%
Endif
IF Zähler%=3
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-Var3%
Endif
IF Zähler%=4
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-Var4%
Endif
IF Zähler%=5
Zufall#[&Loop-1].Nummer%=Zufall#[&Loop-1].Nummer%-Var5%
Endif
Inc Zähler%
If Zähler%=6
Zähler%=1
Endif
Endwhile
Whileloop Anzahl%
Dummy1$=@chr$(@Word(Datei#,Zufall#[&Loop].Nummer%)-&Loop-1)
Dummy2$=Dummy2$+Dummy1$
endwhile
Whileloop Varl1%
Dummy1$=@Mid$(Dummy2$,&Loop,1)
Var1$=Var1$+Dummy1$
Endwhile
Whileloop Varl2%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%,1)
Var2$=Var2$+Dummy1$
Endwhile
Whileloop Varl3%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%+Varl2%,1)
Var3$=Var3$+Dummy1$
Endwhile
Whileloop Varl4%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%+Varl2%+Varl3%,1)
Var4$=Var4$+Dummy1$
Endwhile
Whileloop Varl5%
Dummy1$=@Mid$(Dummy2$,&Loop+Varl1%+Varl2%+Varl3%+Varl4%,1)
Var5$=Var5$+Dummy1$
Endwhile
Endproc
Viel Spass damit |
| | | WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 24.04.2006 ▲ |
| |
| | Hubert Binnewies | ACHTUNG!!!!
Beim überarbeiten der Routine für ein neues Proggi ist mir aufgefallen das bei dieser Routine, wenn man sie kennt, der Schlüssel mit einem Trick auf einfachste Art und Weise zurückgerechnet werden kann.
Ich arbeite gerade an einer Routine bei der das nicht mehr möglich ist.
Also : NICHT VERWENDEN !
An IF: Es wäre schon wenn du diesen Beitrag löschen könntest. Wenn ich die neue Routine fertig habe eröffne ich dann einen neuen Beitrag.
Danke
Hubert |
| | | WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 27.06.2006 ▲ |
| |
| | Michael Wodrich | Hallo Hubert, Du kannst Deine geposteten Beiträge nachträglich bearbeiten. Am Ende steht (unten rechts) editieren.
Wenn Du den Beitrag geändert hast, dann weist Du einfach mit einem neuen Posting darauf hin, das da jetzt etwas geändert wurde. Die Änderungen bekommt sonst ja keiner mit.
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 27.06.2006 ▲ |
| |
| | Hubert Binnewies | Hallo zusammen...
Nach 2 Wochen gutem durchbraten in der Sonne von Friedewald (Westerwald) und etwa einem Gigabyte an Fotos, bin ich vollkommen Relaxed wieder hier. Natürlich habe ich mich direkt wieder an die Routine zum verschlüsseltem Speichern gesetzt und wollte hier die fertige Routine posten.
Aber erstmal etwas zu der Routine: 1.) Sie bietet Platz für 101 Strings mit einer Länge von bis zu 50 Zeichen. 2.) Sie bietet Platz für 101 Integerwerte. 3.) da 2 Schlüssel miteinander verwurstet werden, entsteht ein riesig langer Schlüssel der, unter der Voraussetzung das beide Schlüssel unterschiedlich lang sind, keine Wiederholungen zeigt. Womit aufgrund der astronomisch hohen Möglichkeiten ein Brute-Force Angriff praktisch unmöglich wird. Ebenso wird ein Rückrechnen der Schlüssel praktisch unmöglich.
Um das ganze noch abzurunden sei erwähnt das man auf keinen Fall die Schlüssel im Programm unterbringen sollte, da man sie sonst durch Disassamblieren erhält.
Viel Spass mit der Routine, ich hoffe auf viele Kommentare.
Hubert KompilierenMarkierenSeparieren_________________________________________________________________________________________
Globale Variablen, hier kommen die zu Speichernden Werte hinein
Declare Speicherdaten#[100], Schlüssel$,Schlüssel2$
Struct Nutzdaten = Stringvar$(50), Intvar%
Dim Speicherdaten#[], Nutzdaten
_________________________________________________________________________________________
Beim Aufruf wird noch ein Dateiname (gegebenenfalls mit Pfad) benötigt und ein
beliebig langer Schlüssel (max 235 Zeichen) als String der alle mit der Tastatur
erreichbare Zeichen enthalten darf.
Beispielaufruf :
Whileloop 0,100
Speicherdaten#[&loop].Stringvar$="testdatensatz nummer:"+@Str$(&loop)+" Integerwert:"
Speicherdaten#[&loop].Intvar%=&loop
endwhile
Schlüssel$="AABBCCDDEEFFGG112233445566"
Schlüssel2$="abcdefghijk"
Speichern $Progdir+"INI.DAT",Schlüssel$,Schlüssel2$
cls
print "fertig"
waitinput
_________________________________________________________________________________________
Am Programmende muss noch dies, da sonst der Speicher nicht freigegeben wird.
Dispose Speicherdaten#[]
_________________________________________________________________________________________
Die Speicher Routine
Proc Speichern
Parameters Datei$, Schlüssel$, Schlüssel2$
Declare Speicherstring$, Speicherschlüssel$, Speicherschlüssel1$, Speicherschlüssel2$, Speicherstringverschlüsselt$, Speicherstringlänge%
Declare Zähler1%, Zähler2%, Zähler3%, Dummy1%, Dummy2%, Dummy3%, Datei#, Speicherstringlängecod%
Dim Datei#,30720
Randomize
Whileloop 0,100 <---Bei weniger Datensätze, diese Zahl anpassen
Speicherstring$=Speicherstring$+chr$(len(Speicherdaten#[&loop].Stringvar$))+Speicherdaten#[&loop].Stringvar$+chr$(len(str$(Speicherdaten#[&loop].Intvar%)))+str$(Speicherdaten#[&loop].Intvar%)
EndWhile
Speicherstringlänge%=len(Speicherstring$)+1
Speicherstringlängecod%=Speicherstringlänge%
Whileloop len(Schlüssel$)
Speicherstringlängecod%=Speicherstringlängecod%+ord(mid$(Schlüssel$,&Loop,1))
Endwhile
Declare Zufall%[Speicherstringlänge%]
Whilenot Speicherstringlänge%<len(Speicherschlüssel1$)
Speicherschlüssel1$=Speicherschlüssel1$+Schlüssel$
Endwhile
Whilenot Speicherstringlänge%<len(Speicherschlüssel2$)
Speicherschlüssel2$=Speicherschlüssel2$+Schlüssel2$
Endwhile
WhileLoop 0,Speicherstringlänge%+1
Speicherschlüssel$ = Speicherschlüssel$ + @Chr$(@XOr(@Ord(@Mid$(Speicherschlüssel1$,&Loop,1)), @Ord(@Mid$(Speicherschlüssel2$,&Loop,1))))
EndWhile
WhileLoop 0,Speicherstringlänge%+1
Speicherstringverschlüsselt$ = Speicherstringverschlüsselt$ + @Chr$(@XOr(@Ord(@Mid$(Speicherstring$,&Loop,1)), @Ord(@Mid$(Speicherschlüssel$,&Loop+1,1))))
EndWhile
Clear Datei#
Whileloop Speicherstringlänge%
Dummy2%=&loop
Dummy3%=0
Whilenot Dummy3%
Dummy3%=1
Dummy1%=(Rnd(30710-(Speicherstringlänge%*2)))+10+(Speicherstringlänge%*2)
If @byte(Datei#,Dummy1%)=0
Byte Datei#,Dummy1%=1
Zufall%[Dummy2%]=Dummy1%
else
Dummy3%=0
Endif
Endwhile
Endwhile
Whileloop 0,15359
Word Datei#,(&Loop-1)*2,Rnd(65533)
Endwhile
Whileloop 0,Speicherstringlänge%-1
Byte Datei#,Zufall%[&Loop]=Ord(mid$(Speicherstringverschlüsselt$,&Loop+1,1))
Endwhile
Word Datei#,0=Speicherstringlängecod%
Whileloop Speicherstringlänge%
Word Datei#,&Loop*2=@XOr(Zufall%[&Loop-1], @Ord(@Mid$(Speicherschlüssel$,&Loop,1)))
Endwhile
Assign #1, Datei$
OpenRW #1
BlockWrite #1, Datei#, 0, 30720
CloseRW #1
Endproc
KompilierenMarkierenSeparieren_________________________________________________________________________________________
Globale Variablen, hier kommen die gespeicherten Werte hinein
Declare Speicherdaten#[100], Schlüssel$, Schlüssel2$, Erfolg%
Struct Nutzdaten = Stringvar$(50), Intvar%
Dim Speicherdaten#[], Nutzdaten
_________________________________________________________________________________________
Beim Aufruf wird noch der Dateiname (gegebenenfalls mit Pfad) benötigt und der
Schlüssel als String.
Rückgabewert: 0=ungültige Datei (Vorsicht, es werden nur elementare Dinge geprüft,
sinvoll wäre ein Prüfwert)
1=gültige Datei
Beispielaufruf :
Schlüssel$="AABBCCDDEEFFGG112233445566"
Schlüssel2$="abcdefghijk"
Erfolg%=Laden ($Progdir+"INI.DAT",Schlüssel$,Schlüssel2$)
Testausgabe
cls
whileloop 0,100
print Speicherdaten#[&loop].Stringvar$;
print " ";
print Speicherdaten#[&loop].Intvar%
waitinput
endwhile
_________________________________________________________________________________________
Am Programmende muss noch dies, da sonst der Speicher nicht freigegeben wird.
Dispose Speicherdaten#[]
_________________________________________________________________________________________
Die Lade Routine
Proc Laden
Parameters Datei$, Schlüssel$, Schlüssel2$
Declare Datei#, Zähler1%, Zähler2%, Zähler3%, Dummy1%, Dummy2%, Dummy3%, Speicherstringlängecod%
Declare Speicherstring$, Speicherschlüssel$, Speicherschlüssel1$, Speicherschlüssel2$, Speicherstringverschlüsselt$, Speicherstringlänge%
Declare Falschedatei%
Dim Datei#,30720
Falschedatei%=1
Assign #1, Datei$
OpenRW #1
Dummy1% = @BlockRead(#1, Datei#, 0, 30720)
CloseRW #1
If Dummy1%<>30720
Falschedatei%=0
Endif
Speicherstringlängecod%=@Word(Datei#,0)
Whileloop len(Schlüssel$)
Speicherstringlängecod%=Speicherstringlängecod%-ord(mid$(Schlüssel$,&Loop,1))
Endwhile
Speicherstringlänge%=Speicherstringlängecod%
If Speicherstringlänge%>5200
Falschedatei%=0
Endif
If Falschedatei%=0
Return 0
Endif
Declare Zufall%[Speicherstringlänge%]
Whilenot Speicherstringlänge%<len(Speicherschlüssel1$)
Speicherschlüssel1$=Speicherschlüssel1$+Schlüssel$
Endwhile
Whilenot Speicherstringlänge%<len(Speicherschlüssel2$)
Speicherschlüssel2$=Speicherschlüssel2$+Schlüssel2$
Endwhile
WhileLoop 0,Speicherstringlänge%+1
Speicherschlüssel$ = Speicherschlüssel$ + @Chr$(@XOr(@Ord(@Mid$(Speicherschlüssel1$,&Loop,1)), @Ord(@Mid$(Speicherschlüssel2$,&Loop,1))))
EndWhile
Whileloop Speicherstringlänge%
Zufall%[&loop-1]=@XOr(@Word(Datei#,&loop*2), @Ord(@Mid$(Speicherschlüssel$,&Loop,1)))
Endwhile
Whileloop 1,Speicherstringlänge%
Speicherstring$=Speicherstring$+chr$(@XOr(@byte(Datei#,Zufall%[&loop-1]), @Ord(@Mid$(Speicherschlüssel$,&Loop,1))))
Endwhile
Zähler1%=2
Whileloop 0,100 <--- Bei weniger Datensätze, diese Zahl anpassen
Dummy1%=@Ord(@Mid$(Speicherstring$,Zähler1%,1))
Speicherdaten#[&loop].Stringvar$=@Mid$(Speicherstring$,Zähler1%+1,Dummy1%)
Dummy2%=@Ord(@Mid$(Speicherstring$,Zähler1%+1+Dummy1%,1))
Speicherdaten#[&loop].Intvar%=Val(@Mid$(Speicherstring$,Zähler1%+2+Dummy1%,Dummy2%))
Zähler1%=Zähler1%+2+Dummy1%+Dummy2%
EndWhile
Return 1
Endproc
|
| | | WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 24.07.2006 ▲ |
| |
|
Zum QuelltextThemenoptionen | 7.807 Betrachtungen |
ThemeninformationenDieses Thema hat 5 Teilnehmer: |