 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 27.05.2007, 18:33 Titel: Vernam verschlüsselung will nicht |
|
|
Hi leutz,
ich steh' grad' total aufm Schlauch, und wollte mal fragen ob einer weiß, was ich falsch mache
Immer bei "Erstelle Header..." macht er nichts mehr... Das fett markierte ist die fragliche stelle...
Zitat: |
declare Sub Save (Dateinummer As Integer, BlockID As String, Block As String)
const PufferG = 16384 'Unser Puffer hier wird 16KB groß.
dim n as integer
dim qdatei as string
dim zdatei as string
dim sdatei as string
dim puffer as string
dim spuffer as string * PufferG
dim cpuffer as string * 1
dim vpuffer as string
dim schlu as string
dim durch as integer
print "Die Vernam-Verschluesselung:"
print "Hier ist die Moeglichkeit gegeben grosse Dateien nach dem Block-Chiffrier"
print "Verfahren zu verschluesseln."
print
input "Bitte zu verschluesselnde Datei angeben!", qdatei
input "Bitte Zieldatei angeben!", zdatei
input "Bitte Schluesseldatei angeben!", sdatei
print
color 4, 0
print "Log:"
print "===="
print "Oeffne Dateien..."
open qdatei for binary access read as #1
open zdatei for binary access write as #2
open sdatei for binary access write as #3
print "Erstelle Header..."
'Erstelle Schluesseldatei-Header:
Save (3, "Head","VERNAM v.1.0 Schlu" )
'Berechne Anzahl der Blocks
do until loc(1) = lof(1)
durch = durch + 1
if lof(1) - loc(1) < PufferG then
Puffer = space(lof(1) - LOC(1))
else
Puffer = space(PufferG)
end if
loop
'Speichere, wieviele Blocks es gibt
Save (3, "NB", str(durch))
'Speichere, wie groß der letzte Block ist
Save (3, "GLB", str(len(puffer)))
print "Starte Verschluesseln..."
n = 0
'Jetzt gehts' ans Verschluesseln
do until loc(1) = lof(1)
durch = durch + 1
n = n + 1
'Schluessel-Generierung:
cpuffer = ""
cpuffer = chr(int(rnd * 255) + 1)
schlu = schlu + cpuffer
'Falls der noch zu kopierende Rest kleiner ist als der Puffer,
'dann wird der Puffer so groß wie der noch zu kopierende Rest.
if lof(1) - loc(1) < PufferG then
Puffer = space(lof(1) - LOC(1))
else
Puffer = space(PufferG)
end if
GET #1, , Puffer
vpuffer = vpuffer + chr((asc(mid(schlu, n,1))) XOR (asc(mid(puffer,n,1))))
PUT #2, , vPuffer
LOOP
Print "Fertig."
Sub Save (Dateinummer As Integer, BlockID As String, Block As String)
Dim ID As String * 6
Dim BlockLaenge As Integer
ID = BlockID + Space(6 - Len(BlockID))
BlockLaenge = Len(Block)
Put #Dateinummer, , ID
Put #Dateinummer, , BlockLaenge
Put #Dateinummer, , Block
End Sub
|
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.05.2007, 19:40 Titel: Re: Vernam verschlüsselung will nicht |
|
|
csderats hat Folgendes geschrieben: | 'Berechne Anzahl der Blocks
do until loc(1) = lof(1)
durch = durch + 1
if lof(1) - loc(1) < PufferG then
Puffer = space(lof(1) - LOC(1))
else
Puffer = space(PufferG)
end if
loop | ..laß dir mal bei jedem Durchlauf 'durch' ausgeben, dann kommst du schnell drauf, daß es eine Endlosschleife ist..
==>Abbruchkriterium überprüfen..
btw:
Ich habe in dem Programm keine Anweisung zum Schließen der Dateien gefunden..
..kein guter Plan..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.05.2007, 19:57 Titel: |
|
|
Wie wär's zu Abwechslung mal mit Code: | Do
..
Loop Until Eof(1) | ?
hth _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.05.2007, 20:03 Titel: |
|
|
oder noch sicherer
Code: |
while not eof(1)
wend
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 27.05.2007, 20:07 Titel: |
|
|
die schleife ist jetzt in der Hauptschleife, aber jetzt gibts wieder ein anderes Prob beim eigentlichen verschlüsseln "bläst" er die daten (1.25 MB) auf 45 MB auf
aktueller src:
Wie man sieht gibt es in der Hauptschleife eine weitere schleife die den gesamten block XORen soll ... aber langsam check ich das net mehr
Code: |
declare Sub Save (Dateinummer As Integer, BlockID As String, Block As String)
const PufferG = 16384 'Unser Puffer hier wird 16KB groß.
dim n as integer
dim x as integer
dim qdatei as string
dim zdatei as string
dim sdatei as string
dim puffer as string
dim spuffer as string * PufferG
dim cpuffer as string * 1
dim vpuffer as string
dim schlu as string
dim durch as integer
dim puffer1 as ubyte
dim puffer2 as ubyte
print "Die Vernam-Verschluesselung:"
print "Hier ist die Moeglichkeit gegeben grosse Dateien nach dem Block-Chiffrier"
print "Verfahren zu verschluesseln."
print
input "Bitte zu verschluesselnde Datei angeben!", qdatei
input "Bitte Zieldatei angeben!", zdatei
input "Bitte Schluesseldatei angeben!", sdatei
print
color 4, 0
print "Log:"
print "===="
print "Oeffne Dateien..."
open qdatei for binary as #1
open zdatei for binary access write as #2
open sdatei for binary access write as #3
print "Erstelle Header..."
'Erstelle Schluesseldatei-Header:
Save (3, "Head","VERNAM v.1.0 Schlu" )
'Berechne Anzahl der Blocks
'do until eof(1)
' print "durch", durch
' durch = durch + 1
' if lof(1) - loc(1) < PufferG then
' Puffer = space(lof(1) - LOC(1))
'else
' Puffer = space(PufferG)
'end if
'loop
'Speichere, wieviele Blocks es gibt
'Save (3, "NB", str(durch))
'Speichere, wie groß der letzte Block ist
'Save (3, "GLB", str(len(puffer)))
'===============================================
print "Starte Verschluesseln..."
n = 0
'Jetzt gehts' ans Verschluesseln :)
do until loc(1) = lof(1)
n = n + 1
'Schluessel-Generierung:
schlu = ""
cpuffer = ""
cpuffer = chr(int(rnd * 255) + 1)
schlu = schlu + cpuffer
Save (3, "B" + str(n), schlu)
'Falls der noch zu kopierende Rest kleiner ist als der Puffer,
'dann wird der Puffer so groß wie der noch zu kopierende Rest.
if lof(1) - loc(1) < PufferG then
Puffer = space(lof(1) - LOC(1))
else
Puffer = space(PufferG)
end if
GET #1, , Puffer
'============================
for x = 1 to pufferg
puffer1 =asc(mid(schlu, n,1))
puffer2 =asc(mid(puffer,n,1))
vpuffer = vpuffer + chr(puffer1 XOR puffer2)
next x
PUT #2, , vPuffer
LOOP
'============================
'Speichere, wieviele Blocks es gibt
Save (3, "NB", str(durch))
'Speichere, wie groß der letzte Block ist
Save (3, "GLB", str(len(puffer)))
close
Print "Fertig."
end
Sub Save (Dateinummer As Integer, BlockID As String, Block As String)
Dim ID As String * 6
Dim BlockLaenge As Integer
ID = BlockID + Space(6 - Len(BlockID))
BlockLaenge = Len(Block)
Put #Dateinummer, , ID
Put #Dateinummer, , BlockLaenge
Put #Dateinummer, , Block
End Sub |
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick
Zuletzt bearbeitet von csde_rats am 27.05.2007, 20:54, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.05.2007, 20:34 Titel: |
|
|
Ähm, es gibt in FreeBASIC einen Befehl, der heißt Rem(das ist die Abkürzung für Remark also Anmerkung, kann mit ' abgekürzt werden)
Mit solchen Rem-Zeilen lassen sich markante Stellen im Text kenntlich machen.
M.a.W: Du kannst ruhig die [ Code ]-Tags benutzen, es ist dann besser zu lesen..
..die fraglichen Stellen kannste ja mit Rem Jetz gets los kennzeichnen.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 27.05.2007, 20:59 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | Ähm, es gibt in FreeBASIC einen Befehl, der heißt Rem(das ist die Abkürzung für Remark also Anmerkung, kann mit ' abgekürzt werden)
Mit solchen Rem-Zeilen lassen sich markante Stellen im Text kenntlich machen.
M.a.W: Du kannst ruhig die [ Code ]-Tags benutzen, es ist dann besser zu lesen..
..die fraglichen Stellen kannste ja mit Rem Jetz gets los kennzeichnen.. |
Ne du, hätt ich jetzt nicht gedacht war nur nicht auf die Idee gekommen, außerdem konnte man so beim runterscrollen die Stellen besser finden _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.05.2007, 21:11 Titel: |
|
|
Na bitte, es geht doch..
[Edit] Code: | Sub Save (Dateinummer As Integer, BlockID As String, Block As String)
Put #Dateinummer, , BlockID + Space(6 - Len(BlockID)) 'ID
Put #Dateinummer, , Len(Block) 'BlockLaenge
Put #Dateinummer, , Block
End Sub | Auch in einem Verschlüsselungsprogramm ist es ratsam, den Code übersichtlich zu gestalten..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 27.05.2007, 21:19, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 27.05.2007, 21:16 Titel: |
|
|
Weiss net genau ob das zum eigentlichen Thema gehört
Aber habe gerade dieses hier zum testen gebastelt...
Einfache verschlüsselung
File_codieren.bas
Code: |
''Vorbereitung...
Dim OFile as String
Dim CFile as String
Dim Code as String
Input "Zu Codierende Datei eingeben:";OFile
Input "Schlüssel eingeben";Code
CFile=OFile+".CFL"
'--
Dim Code_Len as UInteger
Dim Buffer as String*20
Dim Buffer_ as String
Dim byter as ubyte
Dim ABuffer as String
Dim BBuffer as String
Dim Code_cnt as Integer
Dim CC_End as ubyte
Dim chr_code as ubyte
Dim chr_file as ubyte
Code_Len=Len(Code)
Open OFile for binary access read as #1
Open CFile for binary access write as #2
Do
ABuffer=""
If Loc(1)+20>lof(1) Then
Buffer_=""
for l=0 to lof(1)-loc(1)-1
get #1,,byter
Buffer_+=chr$(byter)
next l
ABuffer=Buffer_
CC_End=1
Else
get #1,,Buffer
ABuffer=Buffer
End If
BBuffer=""
For l=0 to len(ABuffer)-1
chr_file=asc(mid$(ABuffer,1+l,1))
chr_code=chr_file+asc(mid$(code,1+code_cnt,1))
BBuffer+=chr$(chr_code)
code_cnt+=1
if code_cnt>len(code)-1 then code_cnt=0
Next l
put #2,,BBuffer
Loop until CC_End=1
Close #2
Close #1
|
file_decodieren.bas
Code: |
''Vorbereitung...
Dim OFile as String
Dim CFile as String
Dim Code as String
Input "Datei zum Entschlüsseln eingeben:";OFile
Input "Datei speichern als";CFile
Input "Schlüssel eingeben";Code
'--
Dim Code_Len as UInteger
Dim Buffer as String*20
Dim Buffer_ as String
Dim byter as ubyte
Dim ABuffer as String
Dim BBuffer as String
Dim Code_cnt as Integer
Dim CC_End as ubyte
Dim chr_code as ubyte
Dim chr_file as ubyte
Code_Len=Len(Code)
Open OFile for binary access read as #1
Open CFile for binary access write as #2
Do
If Loc(1)+20>lof(1) Then
Buffer_=""
for l=0 to lof(1)-loc(1)-1
get #1,,byter
Buffer_+=chr$(byter)
next l
ABuffer=Buffer_
CC_End=1
Else
get #1,,Buffer
ABuffer=Buffer
End If
BBuffer=""
For l=0 to len(ABuffer)-1
chr_file=asc(mid$(ABuffer,1+l,1))
chr_code=chr_file-asc(mid$(code,1+code_cnt,1))
BBuffer+=chr$(chr_code)
code_cnt+=1
if code_cnt>len(code)-1 then code_cnt=0
Next l
put #2,,BBuffer
Loop until CC_End=1
Close #2
Close #1
|
Hab das ganze mit einer einfachen Textdatei getestet, leider kommt am ende noch ein zeichen das da eigentlich nicht hingehört....
Edit: fehler gefunden und behoben  _________________
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 27.05.2007, 23:32 Titel: |
|
|
Code: | 'Berechne Anzahl der Blocks
'do until eof(1)
' print "durch", durch
' durch = durch + 1
' if lof(1) - loc(1) < PufferG then
' Puffer = space(lof(1) - LOC(1))
'else
' Puffer = space(PufferG)
'end if
'loop |
Der Sinn ist, dass du die Kommentarzeichen HINTER den BEfehlen machst, denn dann kannst du da auch nen kommentar hinschreiben
Zu dem Problem:
Das ist ne endlosschleife, wie bereits gesagt wurde.
LOC gibt zurück, an welcher position man sich in der Datei befindet. Diese Position veränderst du in der Schleife nicht. Du musst da irgendwo lesen/schreiben, damit sich was ändert  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
|
|
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.
|
|