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:

Vernam verschlüsselung will nicht

 
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
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.05.2007, 18:33    Titel: Vernam verschlüsselung will nicht Antworten mit Zitat

Hi leutz,
ich steh' grad' total aufm Schlauch, und wollte mal fragen ob einer weiß, was ich falsch mache lächeln

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 lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.05.2007, 19:40    Titel: Re: Vernam verschlüsselung will nicht Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.05.2007, 19:53    Titel: Antworten mit Zitat

Oh, thx für die Hilfe happy aber selbst bei do until eof(1) bricht der net ab weinen
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.05.2007, 19:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.05.2007, 20:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.05.2007, 20:07    Titel: Antworten mit Zitat

die schleife ist jetzt in der Hauptschleife, aber jetzt gibts wieder ein anderes Prob grinsen 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 missbilligen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.05.2007, 20:34    Titel: Antworten mit Zitat

Ä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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.05.2007, 20:59    Titel: Antworten mit Zitat

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 Zunge rausstrecken 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.05.2007, 21:01    Titel: Antworten mit Zitat

aaah, oooh ich habe vergessen den vpuffer zu leeren grinsen jetzt funzt alles so wies soll
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.05.2007, 21:11    Titel: Antworten mit Zitat

Na bitte, es geht doch.. grinsen
[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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 27.05.2007, 21:16    Titel: Antworten mit Zitat

Weiss net genau ob das zum eigentlichen Thema gehört grinsen
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 zwinkern
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 27.05.2007, 23:32    Titel: Antworten mit Zitat

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 durchgeknallt

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 zwinkern
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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
Seite 1 von 1

 
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