Verschlüsselung und Datenzusammenlegung [fixed]
Übersicht

![]() |
nils2771989Betreff: Verschlüsselung und Datenzusammenlegung [fixed] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey ho....
Ich hab mich für mein momentanes Projekt mit dem Verschlüsseln bzw zusammenlegen von Dateien beschäftigt. Das Ergebnis will ich mal veröffentlichen, vlt ist es auch noch für anderen von Nutzen Zur Beschreibung: Wenn man eine Datei verschlüsseln will, muss man einfach einen Dateinamen und ein Passwort eingeben. Bei dem Namen werden alle Dateien im aktuellen Verzeichnis durchgegangen und alle Dateien, die den entsprechenden Dateinamen von Links her gelesen haben, werden mit eingebunden. Z.b. Man gibt "Spiel" ein, dann werden z.b. "Spiel.exe","Spiel_bild.bmp" eingebunden, wenn man "Spiel.exe" eingibt, wird nur "Spiel.exe" eingebunden Die Verschlüsselten Dateien werden aber nicht gelöscht, nachdem sie verpackt wurden(um Datenverlust zu vermeiden ![]() Beim entpacken/entschlüsseln werden die in der gelesenen Datei enthaltenen Dateien Aufgelistet und man kann sich entscheiden, welche davon nun extrahiert werden soll. Man kann aber auch alle Dateien auf einmal entpacken. Code: [AUSKLAPPEN] Global key$,length ;Passwort Global counter%=1 ;Variable für Passwort Global leng[20] ;Einzelne Werte für das Passwort Global size,name$ ;Groesse und Name Global searchname$ ;Type für die einzulesende/auszugebende Dateien Global file.file Type file Field fullname$ Field position% Field size% End Type ;Die Methode auswaehlen Print "Verschlüsseln(1) oder Entschlüsseln(2)?" do$ = Input$() ;Passwort und Dateien einlesen If do$="1" searchname$=Input$("Name der Datei:") Code() Else If do$="2" searchname$=Input$("Name der Datei:") Decode() EndIf Function Code() ;Variable zum Testen ob Dateien vorhanden Filetest=False ;Die entsprechenden Dateien herraussuchen dir$=ReadDir(CurrentDir()) Repeat ReadFiles$=NextFile$(dir$) If ReadFiles$="" Then Exit If Lower( Left( readfiles$, Len(searchname))) = searchname And FileType(CurrentDir()+ReadFiles)=1 And Lower( Right( readfiles$, 3))<>"ash" file=New file file\fullname=ReadFiles filetest=True EndIf Forever ;Das Verzeichnis schließen CloseDir dir$ If Not filetest Print "Keine entsprechenden Dateien gefunden" Print "Beliebige Taste zum Beenden drücken" WaitKey() End EndIf ;Passwort zum Verschluesseln abfragen key$=Input("Das Passwort: ") ;Das Passwort in einem Array speichern For i=1 To Len(key$) leng[i]=Asc(Mid(key$,i)) Next ;Datei zum schreiben oeffnen settings=WriteFile(searchname+".ash") ;Fuer jede gefundene Datei ausfuehren For file.file=Each file fileread=ReadFile(file\fullname) ;Groesse der Datei ermitteln size=FileSize(file\fullname) ;Name und groesse schreiben WriteString settings,file\fullname WriteInt settings,size ;Fuer jedes Byte ausfuehren For i=1 To size ;Byte auslesen ent=ReadByte (fileread) ;Wert veraendern ent=ent-leng[counter]+leng[Len(key$)+1-counter] ;Variable zwischen 0 und 255 halten If ent<0 ent=ent+256 Else If ent>255 ent=ent-256 EndIf ;Byte schreiben WriteByte settings,ent ;Zahl fuer Veraenderung des Passwortes dest=dest+(Len(key$)-counter) If dest<0 dest=Len(key$)-dest Else If dest>Len(key$) dest=dest-Len(key$) EndIf ;Passwort veraendern leng[counter]=leng[counter]+leng[dest] If leng[counter]<0 leng[counter]=leng[counter]+256 Else If leng[counter]>255 leng[counter]=leng[counter]-256 EndIf counter=counter+1 If counter>Len(key$) counter=1 EndIf Next ;Geschrieben Datei anzeigen und schliessen Print file\fullname CloseFile fileread Next ;Geschriebene Datei schliessen CloseFile settings ;Types loeschen For file.file=Each file Delete file.file Next Print "Datei geschrieben, beliebige Taste zum beenden" WaitKey() End Function ; Funktion zum Entschluesseln der Dateien Function DeCode() ;Das Passwort in einem Array speichern key$=Input("Das Passwort: ") For i=1 To Len(key$) leng[i]=Asc(Mid(key$,i)) Next length=Len(key$) settings = ReadFile(searchname+".ash") If settings=False Print "Keine entsprechenden Dateien gefunden" Print "Beliebige Taste zum Beenden drücken" WaitKey() End EndIf ;Enthaltene Dateien ermitteln Print "Enthaltene Dateien:" Repeat file=New file file\fullname=ReadString(settings) file\position=size size=size+Len(file\fullname)+4 ent=ReadInt(settings) file\size=ent size=size+ent+4 Print " "+Handle(file.file)+"."+file\fullname SeekFile(settings,size) Until Eof(settings) size=0 Print "Nummer um entsprechende Datei zu entschlüsseln" Print "0 um alle zu entschlüsseln" datei%=Input$() ;Ermittlung für die Veraenderung des Passwortes For i=1 To datei-1 file.file=Object.file(i) size=size+file\size Next If datei=0 SeekFile(settings,0) size=0 Else file.file=Object.file(datei%) SeekFile(settings,file\position) EndIf ;Der vorgang ist zwar recht langwierig, muss aber sein um das Passwort anzupassen For i=1 To size ;Die Zahl fuer die Variation vom Passwort aendern dest=dest+(length-counter) If dest<0 dest=length-dest Else If dest>length dest=dest-length EndIf ;Das Passwort beim Auslesen Variiren leng[counter]=leng[counter]+leng[dest] If leng[counter]<0 leng[counter]=leng[counter]+256 Else If leng[counter]>255 leng[counter]=leng[counter]-256 EndIf counter=counter+1 If counter>length counter=1 EndIf Next ;Hauptschleife fuer gesamte Datei Repeat ;den Dateinamen auslesen name=ReadString(settings) ;Länge der enthaltenen Datei auslesen size=ReadInt(settings) ;Datei zum schreiben erstellen testwrite=WriteFile(name) ;Unterschleife für einzelne Dateine For i=1 To size ;Das Byte auslesen und entsprechend dem Code veraendern ent=ReadByte(settings) versch=ent ent=ent+leng[counter]-leng[length+1-counter] ;dafuer sorgen, dass die Variable innerhalb der 1 Byte Grenze bleibt If ent<0 ent=ent+256 Else If ent>255 ent=ent-256 EndIf WriteByte testwrite,ent ;Die Zahl fuer die Variation vom Passwort aendern dest=dest+(length-counter) If dest<0 dest=length-dest Else If dest>length dest=dest-length EndIf ;Das Passwort beim Auslesen Variiren leng[counter]=leng[counter]+leng[dest] If leng[counter]<0 leng[counter]=leng[counter]+256 Else If leng[counter]>255 leng[counter]=leng[counter]-256 EndIf counter=counter+1 If counter>length counter=1 EndIf Next ;Dateien schliessen CloseFile testwrite Until Eof(settings) Or datei<>0 ;Geschriebene Datei schliessen CloseFile settings ;Types loeschen For file.file=Each file Delete file.file Next Print "Datei(en) extrahiert, beenden mit beliebiger Taste" WaitKey() End Function End Ich weiß, die Verschlüsselung lässt zu wünschen übrig und könnte leicht geknackt werden, wenn ich zeit habe, werde ich mal versuchen diese zu verbessern. Edit: Sry es hatte sich wohl ein Fehler bei der Entschlüsselung eingeschlichen...müsste jetzt ohne Probleme gehen ![]() |
||
Schummle nicht, aber spiele nach eigenen Regeln.
Sei nicht verrückt, sondern einfach nur wahnsinnig. Sei nicht böse, führ nur nichts Gutes im Schilde. Verändere dich nicht, bleib immer anders. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group