Deutsch
Quelltexte/ Codesnippets

Speichern Verschlüsseltes

 

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
KompilierenMarkierenSeparieren
Speichern "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:
KompilierenMarkierenSeparieren
Laden "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.
KompilierenMarkierenSeparieren
Superschnelles 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
 
23.04.2006  
 




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 )
 
23.04.2006  
 




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 Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.796 Betrachtungen

Unbenanntvor 0 min.
Gast.081526.08.2024
PETER195618.07.2018
Georg Teles09.01.2016
Michael Borowiak15.11.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie