Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Verschlüsselungsprogramm
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 17.10.2014, 00:52    Titel: Antworten mit Zitat

Ja ja, gebt's mir nur! Macht mich fertig! grinsen

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 19.10.2014, 20:26    Titel: Antworten mit Zitat

Hab da mal noch ein anderes Prog gebastelt. Es arbeitet mit der Spaltentransposition (Permutation) und ist noch nicht perfekt. Mir reichts erst mal für den Anfang; für Tipps bin ich aber dennoch froh. zwinkern

EDIT: Hab's jetzt mal noch leicht abgeändert.

Code:

dim as integer i,j,n,zahl
dim as string modus,zeichen
print "1=Alles 2=Codieren 3=Lesen"
sleep
modus=inkey
cls

open "Text.txt" for binary access read as #1
do
line input #1,zeichen
n+=len(zeichen)
loop until eof(1)
close

if n mod 2>0 then
open "Text.txt" for append as #1
print #1," ";
close
n+=1
end if

dim as string feld1(n),feld2(n)
open "Text.txt" for binary access read as #1
zeichen = Input(Lof(1),#1)
for i=1 to n
feld1(j)=mid(zeichen,i,1)
  j+=1
next
close

if modus="1" or modus="2" then
for zahl=0 to 2
j=0
for i=1 to n step 2
feld2(j)=feld1(i)
j+=1
next
for i=0 to n step 2
feld2(j)=feld1(i)
j+=1
next

for i=0 to n
feld1(i)=feld2(i)
next
open "Text.txt" for output as #1
for i=0 to n
print #1,feld2(i);
next
close
next
end if

if modus="1" or modus="3" then
for zahl=0 to 2
j=0
for i=n/2 to n
feld2(j)=feld1(i)
j+=2
next
j=1
for i=0 to n/2
feld2(j)=feld1(i)
j+=2
next

for i=0 to n
feld1(i)=feld2(i)
next
open "Text.txt" for output as #1
for i=0 to n
print #1,feld2(i);
next
close
next
end if

shell "START Notepad.exe Text.txt"


Zuletzt bearbeitet von Input am 23.10.2014, 06:51, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 21.10.2014, 08:36    Titel: Antworten mit Zitat

Hallo Input!

Ein paar Anmerkungen:

1): Daß es nicht besonders klug ist, das Passwort im Klartext im Quellcode unterzubringen, ist hier glaube ich schon einmal erwähnt worden. Aber da es sich hier um eine Testvesion handelt, sei es dir noch einmal verziehen. grinsen

2): Der Menüpunkt "Alles" macht -auch zum Testen- wenig Sinn, da der Text nach einmaligem Verschlüsseln sofort wieder entschlüsselt wird - und das dreimal hintereinander.

3): Das Programm sollte dem (entschlüsselten) Text nicht eigenmächtig Zeichen hinzufügen.

4): Um gelegentliche Abstürze zu vermeiden, solltest du am Ende des Programms noch ein "End" hinzufügen.

5): Das Programm hat eine entscheidende Schwachstelle: Wer den Quelltext kennt (Open Source), kann alle damit verschlüsselten Texte wieder lesbar machen.

Ansonsten: Wenn du es schaffst, die Verschlüsselung vom Passwort abhängig zu machen, hast du ein ganz brauchbares Verschlüsselungsprogramm. Ein erster Ansatz dazu könnte sein, die Zeile
Code:
If pw<>"Susi" Then End Else Cls
(hast du dich da durch die "kleine Schwester" inspirieren lassen? grinsen ) durch
Code:
Cls
Dim As Integer mp
For i = 0 To Len(pw) - 1
   mp += pw[i]
Next
und entsprechend
Code:
For zahl=0 To 2
durch
Code:
For zahl=0 To mp
zu ersetzen. Das ist dann zwar immer noch keine besonders starke Verschlüsselung, aber zum Knacken sind immerhin schon einige Programmierkenntnisse erforderlich.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 21.10.2014, 16:00    Titel: Antworten mit Zitat

ich würde folgenden Ansatz verfolgen.

Verschlüsselung:
- erzeuge einen zufälligen Schlüssel mit einer Länge von 1/16 Größe der Rohdaten.
- Rohdaten verschlüsseln
- Schlüssel in Teile zufälliger Länge zerhacken und mit Passwort verschlüsseln
- verschl. Schlüsselteile an zufälligen Positionen verteilen und Position/Länge in Schlüsseldeskriptorentabelle ablegen
- Position für Schlüsseldeskriptorentabelle berechnen aus Passwort und länge der Gesamtdaten(Rohdaten+Schlüssel+Schlüsseldeskriptorentabelle)
- Schlüsseldeskriptorentabelle mit Passwort verschlüsseln und einfügen


Entschlüsselung:
- Position der Schlüsseldeskriptorentabelle aus Passwort und Dateilänge berechnen
- Schlüsseldeskriptorentabelle extrahieren und entschlüsseln
- Gesamtschlüssel extrahieren, entschlüsseln und zusammensetzen
- Daten mit Gesamtschlüssel entschlüsseln


evt. nimmt man zum ver- und entschlüsseln der Tabelle und des Schlüssels den SHA-256 oder SHA-512 Hashwert des Passworts
http://www.freebasic-portal.de/downloads/bibliotheken/hash-funktionen-md5-sha1-sha512-169.html

Um beim Entschlüsseln schneller zu überprüfen, ob das eingebene Passwort stimmt, könnte man auch den hashwert des haswerts des Passworts integrieren und die Position in der Schlüsseldeskriptorentabelle hinterlegen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 21.10.2014, 19:16    Titel: Antworten mit Zitat

Hallo lieber grindstone. happy

Das PW soll nur vor "Susi" schützen, nicht vor dem grossen "Bruder".

Zu "Alles": Die Zeichen sollen mehrfach verwürfelt werden. "Alles" hab ich einfach so noch mit rein gemacht; aber hast schon recht: Macht keinen Sinn so.

3. Mit dem Leerzeichen muss ich nicht so basteln wie "mit ohne".

Das END lass ich eigentlich immer weg.

Und ja: der Quelltext; aber den hat zum Glück nicht jeder.

Gruss: Input zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 22.10.2014, 02:38    Titel: Antworten mit Zitat

Input hat Folgendes geschrieben:
Das END lass ich eigentlich immer weg.
Ist normalerweise auch nicht erforderlich, außer, man möchte "mittendrin" aufhören.
Es mag an meiner Windowsversion/-installation liegen, aber ohne "End" am Schluß stürzt das Programm nach dem Öffnen des Editors ab, statt sich zu beenden, sobald die Testdatei länger als 82 Bytes ist (keine Ahnung, warum). verwundert

Gruß
grindstone

EDIT: Das Programm stellt auch die Zeilenumbrüche nicht korrekt wieder her. Um das zu beheben, könntest du es wie folgt abändern:
Code:
...
Dim As String feld1(n),feld2(n)
Open "Text.txt" For Binary Access Read As #1
zeichen = Input(Lof(1),#1)
For i=1 To n
   feld1(j)=Mid(zeichen,i,1)
   j+=1
Next
Close
...


EDIT 2: Man kann das Programm -bei gleicher Funktionalität- deutlich kürzen:
Code:
Dim As Integer i,n,zahl,mp
Dim As String modus,pw,zeichen,feld

Input "Passwort:",pw
Cls

For i = 0 To Len(pw) - 1 'anzahl der schleifendurchläufe aus dem passwort generieren
   mp += pw[i]
Next

Print "1=Alles 2=Codieren 3=Lesen"
Sleep
modus=InKey
Cls

Open "Text.txt" For Binary Access Read As #1
zeichen = Input(Lof(1),#1) 'gesamte datei in einen string einlesen
Close

n = BitReset(Len(zeichen),0) 'erzeugt die nächstniedrige gerade zahl. bei ungerader
                             ' länge bleibt das letzte zeichen an seinem platz
feld = zeichen 'ergebnisstring initialisieren (dient nur der platzreservierung)

For zahl=0 To mp
   If modus="1" Or modus="2" Then 'verschlüsseln
      For i = 0 To n/2 - 1 'der zugriff auf einzelne bytes über indizierte stringpointer ist
                           ' effektiver als die verwendung von arrays (und genauso einfach)
         feld[n/2 + i] = zeichen[i*2] 'gerade zeichen in die obere hälfte
         feld[i] = zeichen[i*2 + 1] 'ungerade zeichen in die untere hälfte
      Next
      zeichen = feld 'für den nächsten durchlauf
   End If

   If modus="1" Or modus="3" Then 'entschlüsseln
      For i = 0 To n/2 - 1
         feld[i*2] = zeichen[n/2 + i] 'gegenüber der verschlüsselung sind
         feld[i*2 + 1] = zeichen[i]   ' nur die indices vertauscht
      Next
      zeichen = feld 'für den nächsten durchlauf
   End If
Next

Open "Text.txt" For Output As #1
Print #1,zeichen; 'ergebnis in datei schreiben
Close
Shell "START Notepad.exe Text.txt"
End
Bei dieser Version entspricht außerdem die decodierte Datei wieder exakt dem Original. lächeln
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 22.10.2014, 12:05    Titel: Antworten mit Zitat

Ich hätte noch folgenden Tip für euch:

Nutzt das Ergebnis jedes Verschlüsseltes Zeichens als Startwert für das nächste Zeichen.

Das macht das "zufällige knacken" von Botschaftsfragmente deutlich schwerer. und verhindert so die replikative wiederholung dieser mit dem selben "schlüsselfragment".


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 22.10.2014, 17:20    Titel: Antworten mit Zitat

Zitat:
Nutzt das Ergebnis jedes Verschlüsseltes Zeichens als Startwert für das nächste Zeichen.

Das macht das "zufällige knacken" von Botschaftsfragmente deutlich schwerer. und verhindert so die replikative wiederholung dieser mit dem selben "schlüsselfragment".


Ich glaube das dieses Vorgehen, eine Nachricht besonders anfällig für Angriffe macht, da man dadurch die Entropie deutlich verringert. Letztlich besteht der Schlüssel jedes Zeichens nur noch aus einer Kombination aus 50 möglichen aus insgesamt 256 Zeichen.[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 22.10.2014, 17:24    Titel: Antworten mit Zitat

öm .. eigentlich besteht es dann noch immer aus 255 möglichen zeichen ... aber, es kommt natürlich darauf an, was für ein cryptogrundverfahren angesetzt wird. Wenn ein Byteout nur 50 mögliche zeichen zur verfügung stellt, dann ist die gesammtbasis genauso anfällig wie mit oder ohne feedback. Der unterschied ist jedoch, das mit feedback die replikative entropie minimiert. zwinkern


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 22.10.2014, 19:48    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
1): Daß es nicht besonders klug ist, das Passwort im Klartext im Quellcode unterzubringen, ist hier glaube ich schon einmal erwähnt worden.

Ergänzende Bemerkungen: Grundprinzip jeder guten Verschlüsselungssoftware ist das Kerckhoffs’ Prinzip: Der gesamte FreeBasic-Quellcode sollte bedenkenlos vollständig als Open Source veröffentlicht werden können, dasselbe gilt auch für sämtliche Dokumentationen zu den verwendeten Algorithmen. Das festgelegte Geheimnis (z.B. Passwort) besitzen einzig und alleine die Benutzer, welche untereinander Nachrichten austauschen.

Geeignete Algorithmen selber entwickeln ist jedoch ziemlich anspruchsvoll, da recht schnell unwissentlich fundamentale Fehler aus Sicht der Kryptoanalyse passieren können.

Ansonsten für jeden hier zum Lesen:

http://www.heise.de/security/meldung/iOS-und-Android-FBI-Chef-will-Vordereingang-in-verschluesselte-Geraete-2426948.html

=> soll zeigen, dass wirklich gut gemachte Verschlüsselung (z.B. als FreeBasic-Programm implementiert) auch dem Väterchen Staat d.h. dessen Strafverfolgungsbehörden keinerlei "root"-Privilegien gewährt (Stichwort Edward Snowden und NSA).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 23.10.2014, 04:17    Titel: Antworten mit Zitat

Lieber grindstone. Das Problem bei deiner PW-Methode ist, dass sich die Verschlüsselung irgendwann auflöst. Das kann schon nach 6 oder 8 Wiederholungen passieren; deshalb habe ich nur drei genommen. Eigentlich sollte man das ja so machen, aber das ist mir zu kompliziert:

http://public.hochschule-trier.de/~wambacht/webseite2/

Oder etwas komplizierter:

https://www.hochschule-trier.de/uploads/tx_rfttheses/Doppelwuerfel_Tim_Wambach_final.pdf

Gruss: Intro zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 23.10.2014, 04:44    Titel: Antworten mit Zitat

@Input ... ich hab mir dein crypto jetzt nicht angesehen, aber den gerade von dir geposteten ersten link .. du schreibst, das man es so machen sollte ... dem kann ich nur wiedersprechen. (Das steht so übrigens, vieleicht auch etwas "unterschwellig", unter dem link.)

Erstmal wird doch ausschliesslich mit den vorhandenen zeichen gearbeitet und diese nur verschoben, und zwotens nur eine reine verschiebung vorgenommen. Beides ist für eine harte crypto eher ungeeignet.

Als Tip kann ich dir nur ans herz legen (sofern du auch etws sicheres möchtest) dir einmal das "One-Time-Pad" verfahren anzusehen. Dies sollte dir als basis für einen eigenen algo die verständniss von "sicherem crypto" dienen.

Daraus lässt sich z.B. auch schon die erste regel für sichere crypto ableiten: "Ein 3stelliges Passwort bringt heutzutage 0!" (Und, das gilt auch für ein "hashing" von dem passwort selbst.

Selbst der Hash eines 8 Stellige Passwörtes bassiert nur auf 8 Zeichen! Entsprechend sollte der erste gedanke darin liegen ein Passwort zu generieren, das eine gewisse mindestlänge besitzt.

Hieraus könnte man (ist eigentlich unnötig, wenn das pass gut gewählt wurde) ein Hash generieren. Besser wäre ein gut verteilter Binärdatenstrom.

Dieser kann dann als basis für ein one-time-pad crypto verwendet werden.

Um das ergebnis noch weiter zu härten und block und tabellenangriffe zu verhindern wäre es sinvoll das ergebnis eines jeden zeichens (wie schon oben geschrieben) als basisstartwert für die nächste byte-runde zu verwenden.

Ein weiterer notwendiger Schritt um Verhaltens- und Statistikangriffe zu verhindern sollte das Auf- und Zwischenfüllen" des Textes sein.

Wenn man sich an diese paar Grundregeln hält ist DES, AES und co. unnötig.
Hinzu kommt, das gerulär komplexere Crypto-Verfahren mehr Schwachstellen erzeugen als sie zu schliessen. Derartige Verfahren standen schon in den Medien als "angreifbar" was nur dazu geführt hat das die "Bit" Rate erhöht und der Algo überarbeitet wurde.

One-Time-Pad ist bis dato noch der Sicherste Algo den es gibt (auch wenn andere wohl etwas anderes zu Sagen behaupten). Du solltest dich, wie schon erwähnt, mehr auf die Generierung von Sicheren Passwörtern konzentrieren. Je härter dieses ist, desto linear härter (bei one-time-pad) ist auch das ergebnis.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 23.10.2014, 05:50    Titel: Antworten mit Zitat

Lieber PuppetMaster. lächeln Vielen Dank für deine Infos. OTP war das erste Programm, ganz am Anfang. Das PW hab ich nur so mitreingebastelt; natürlich könnte man das auch gleich weglassen. Ich hätte da übrigens noch eine Idee; wenn auch nicht ganz unbekannt: Man versteckt das Prog in einem andern. Mit einer bestimmten Tastenkombi und evt. folgender PW-Abfrage kommt man dann in den Verschlüsselungsteil, oder was auch immer... grinsen Gruss: Input.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 23.10.2014, 13:57    Titel: Antworten mit Zitat

Die Idee, (binäre) Daten an ungewöhnlichen Orten, z. B. in einem Bild zu verstecken, gibt es ja auch schon seit geraumer Zeit (dann aber bitte nicht in der Form, wie es mal in einer Numb3rs-Folge zu sehen war, wo man dann in das Bild hineingezoomt hat, um die versteckte Zahlenfolge im Auge der abgebildeten Person zu lesen lachen )
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 23.10.2014, 16:18    Titel: Antworten mit Zitat

Das nennt man dann Steganographie. Der Haken bei der Sache ist nur, daß der Container viel größer sein muß als die darin versteckten Daten, wenn das Ganze nicht auffallen soll.

ThePuppetMaster hat Folgendes geschrieben:
Erstmal wird doch ausschliesslich mit den vorhandenen zeichen gearbeitet und diese nur verschoben, und zwotens nur eine reine verschiebung vorgenommen. Beides ist für eine harte crypto eher ungeeignet.
Du nimmst mir die Worte aus dem Mund (oder sollte ich besser sagen: "aus der Tastatur"? grinsen ) Ich zweifle, ob man das reine Verwürfeln überhaupt als "Verschlüsseln" bezeichnen kann.

Input hat Folgendes geschrieben:
Das Problem bei deiner PW-Methode ist, dass sich die Verschlüsselung irgendwann auflöst.
Was meinst du mit "auflöst"? Bei mir funktioniert das Programm auch mit "Donaudampfschifffahrtsgesellschaftskapitän" als Passwort. Das entspricht 4461 Schleifendurchläufen. Möglicherweise ist dir da beim Draggen und Droppen irgendwas weggeflutscht.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 26.10.2014, 08:54    Titel: Antworten mit Zitat

So, hab da mal noch etwas dran rumgebastelt und hoffe, dass es jetzt endlich gut ist:

Code:

'Erstellt Variablen
Dim As Integer i,j,n,zahl
Dim As String feld,modus,pw,zeichen

'Erstellt Passwort zur Ver- und Entschlüsselung
Do
Input "Passwort:",pw
Loop Until pw<>""
For i=0 to Len(pw)-1
zahl+=pw[i]
Next
zahl=Fix(Sqr(zahl))
Cls

'Fragt Modus ab
Do
Print "1=Encoder 2=Decoder"
Sleep
modus=InKey
Loop Until modus="1" Or modus="2"
Cls

'Liest Text ein
Open "Text.txt" For Binary Access Read As #1
zeichen=Input(Lof(1),#1)
Close
n=BitReset(Len(zeichen),0)
feld=zeichen

'Verschlüsselt Text
For j=0 To zahl
If modus="1" Then
For i=0 To n/2-1
feld[n/2+i]=zeichen[i*2]
feld[i]=zeichen[i*2+1]
Next
zeichen=feld
End If

'Entschlüsselt Text
If modus="2" Then
For i=0 To n/2-1
feld[i*2]=zeichen[n/2+i]
feld[i*2+1]=zeichen[i]
Next
zeichen=feld
End If
Next

'Ersetzt Zeichen im Text
For i=0 To Len(zeichen)-1
For j=0 To Len(pw)-1
zeichen[i]=zeichen[i] Xor pw[j]
Next
Next

'Schreibt Text in Datei
Open "Text.txt" For Output As #1
Print #1,zeichen;
Close
Shell "START Notepad.exe Text.txt"
End


Edit: Hab's noch etwas verbessert:
Code:

#INCLUDE ONCE "WINDOWS.BI"
#Include Once "win\COMMDLG.BI"

Declare Function LoadSaveDialog(_
savedlog As Integer=0,_
filter As String="txt",_
fltrindex As Integer=4,_
initdir As String="c:\Desktop",_
strDefExt As String="txt") As String

Dim As String DateiName,fil
fil="DOC Dateien (*.DOC)"+Chr(0)+"*.DOC"+Chr(0)_
+"EXE Dateien (*.EXE)"+Chr(0)+"*.EXE"+Chr(0)_
+"PDF Dateien (*.PDF)"+Chr(0)+"*.PDF"+Chr(0)_
+"TXT Dateien (*.TXT)"+Chr(0)+"*.TXT"+Chr(0)_
+"Alle Dateien (*.*)"+Chr(0)+"*.*"+Chr(0, 0)

DateiName=LoadSaveDialog(0,fil,5,"c:\Desktop","txt")
Dim As Integer i,j,n,zahl
Dim As String feld,modus,pw,zeichen

Do
Input "Passwort:",pw
Loop Until pw<>""
For i=0 to Len(pw)-1
zahl+=pw[i]
Next
zahl=Fix(Sqr(zahl))
Cls

Do
Print "1=Encoder 2=Decoder"
Sleep
modus=InKey
Loop Until modus="1" Or modus="2"
Cls

Open DateiName For Binary Access Read As #1
zeichen=Input(Lof(1),#1)
zeichen2=zeichen
Close
n=BitReset(Len(zeichen),0)
feld=zeichen

If modus="1" Then
For j=0 To zahl
For i=0 To n/2-1
feld[n/2+i]=zeichen[i*2]
feld[i]=zeichen[i*2+1]
Next
Next
For i=0 To Len(zeichen)-1
For j=0 To Len(pw)-1
zeichen[i]=zeichen[i] Xor pw[j]
Next
Next
DateiName=LoadSaveDialog(1,fil,5,"c:\Desktop","txt")
Open DateiName For Output As #1
Print #1,zeichen;
Close
End
End If

If modus="2" Then
For j=0 To zahl
For i=0 To n/2-1
feld[i*2]=zeichen[n/2+i]
feld[i*2+1]=zeichen[i]
Next
Next
For i=0 To Len(zeichen)-1
For j=0 To Len(pw)-1
zeichen[i]=zeichen[i] Xor pw[j]
Next
Next
DateiName = LoadSaveDialog(1,fil,5,"c:\Desktop","txt")
Open DateiName For Output As #1
Print #1,zeichen;
Close
End
End If

Function LoadSaveDialog(savedlog As Integer,_
filter As String,fltrindex As Integer,_
initdir As String,strDefExt As String) As String
Dim FB_OFN AS OPENFILENAME
FB_OFN.lStructSize=Len(FB_OFN)
FB_OFN.hwndOwner=0
FB_OFN.hInstance=0
Dim strFilter As String
If filter="" Then
strFilter="Alle Dateien (*.*)"+Chr(0)+"*.*"+Chr(0,0)
Else
strFilter=filter+Chr(0,0)
End If
FB_OFN.lpstrFilter=StrPtr(strFilter)
FB_OFN.nFilterIndex=fltrindex

Dim strFile As String*2048
strFile = Space(2047)+Chr(0)
FB_OFN.lpstrFile=StrPtr(strFile)
FB_OFN.nMaxFile=Len(strFile)
Dim strFileTitle As String*2048
strFileTitle=String(2048,0)
FB_OFN.lpstrFileTitle=StrPtr(strFileTitle)
FB_OFN.nMaxFileTitle=Len(strFileTitle)
Dim strdrstr As String
If initdir="" Then
strdrstr="."
Else
strdrstr=initdir
End If
FB_OFN.lpstrInitialDir=StrPtr(strdrstr)

Dim strcapt As String
If savedlog Then
strcapt="Dateien Speichern"
FB_OFN.lpstrTitle=StrPtr(strcapt)
If strDefExt>"" Then
Dim strdext As String
strdext=strDefExt
FB_OFN.lpstrDefExt=StrPtr(strdext)
End If
FB_OFN.flags=OFN_EXPLORER Or OFN_LONGNAMES Or OFN_OVERWRITEPROMPT Or OFN_HIDEREADONLY
If GetSaveFileName(@FB_OFN) Then LoadSaveDialog=Trim(strFile)
Else
strcapt="Dateien Öffnen"
FB_OFN.lpstrTitle=StrPtr(strcapt)
FB_OFN.flags=OFN_EXPLORER Or OFN_LONGNAMES Or OFN_CREATEPROMPT Or _
OFN_NODEREFERENCELINKS Or OFN_HIDEREADONLY
If GetOpenFileName(@FB_OFN) Then LoadSaveDialog=Trim(strFile)
End If
End Function


Zuletzt bearbeitet von Input am 14.07.2015, 07:00, insgesamt 7-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 26.10.2014, 11:16    Titel: Antworten mit Zitat

Hallo Input!

Das ungefähr hat ThePuppetMaster gemeint, als er schrieb:
Zitat:
...das gerulär komplexere Crypto-Verfahren mehr Schwachstellen erzeugen als sie zu schliessen
Das zusätzliche EXORen des Textes ist im Prinzip keine schlechte Idee, allerdings ist dir bei der Ausführung ein Denkfehler unterlaufen. Statt die Zeichen reihum mit je einem Zeichen des Passwortes zu verknüpfen, verknüpfst du jedes Zeichen des Textes nacheinander mit allen Zeichen des Passwortes, was im Endeffekt dazu führt, daß alle Zeichen mit demselben Wert verknüpft werden. Um diese Verknüpfung rückgängig zu machen, braucht man nur alle 256 Möglichkeiten durchzuprobieren. Für ein Entschlüsselungsprogramm ein Klacks!

Richtig wäre es so:
Code:
...
'Ersetzt Zeichen im Text
j = 0
For i=0 To Len(zeichen)-1
   zeichen[i]=zeichen[i] Xor pw[j]
   j = IIf(j >= Len(pw) - 1,0,j + 1)
Next
...

Das EXOR-Verfahren hat allerdings eine prinzipielle Schwäche. Füge einmal hinter
Code:
'Liest Text ein
Open "Text.txt" For Binary Access Read As #1
zeichen=Input(Lof(1),#1)
Close
die Zeile
Code:
zeichen = String(100,Chr(0))
ein und sieh dir an, was passiert, wenn du diese Folge von Nullen verschlüsselst.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 26.10.2014, 11:31    Titel: Antworten mit Zitat

Vielen Dank!! grinsen Jetzt noch eine Frage: Wie kann ich die Datei unter anderem Namen in einem anderen Verzeichnis speichern?

Edit: Mit dem Menu läuft das jetzt aber viel langsamer; hab ich da noch was falsch gemacht? mit den Augen rollen


Zuletzt bearbeitet von Input am 26.10.2014, 11:40, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 26.10.2014, 11:38    Titel: Antworten mit Zitat

Eternal_Pain hat Folgendes geschrieben:
'Aufruf "Datei Speichern" wenn keine Dateiendung angegeben wird, "bak" als
'Endung benutzen, alle anderen Vorgaben werden übernommen.
'DateiName = LoadSaveDialog (1,,,,"bak")


Gruß
grindstone

EDIT:
Input hat Folgendes geschrieben:
Mit dem Menu läuft das jetzt aber viel langsamer
Kann ich nicht bestätigen. Bei mir brauchen beide Versionen für eine 1MB große Datei ca. 0,7 Sekunden. Hast du vielleicht vergessen, den Nullstring wieder zu entfernen?

Aber du hast den Code von Eternal_Pain nicht korrekt übernommen. Hinten bei der Function fehlt ein Stück! lächeln
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 26.10.2014, 12:36    Titel: Antworten mit Zitat

Funktioniert jetzt einwandfrei. Vielen Dank nochmal. happy

EDIT: Hab grad gemerkt: Mit Cryptool lässt sich das SOFORT lesen; aber für die kleine Schwester wird's schon reichen. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz