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:

Die Herausforderung... Code funzt nicht!
Gehe zu Seite 1, 2  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
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 10:29    Titel: Die Herausforderung... Code funzt nicht! Antworten mit Zitat

Hi, ich hab ein Problem das ich einfach nicht lösen kann.
Also entweder hängt sich der Code auf oder stürtzt einfach ab
Das Problem befindet sich in der dritten For..Next schleife.
Oder besser gesagt wird dort ausgelöst .

Code:
Function PasswortHash(Passwort as String) as String
dim as integer Keylength = 1024
dim as integer Position
dim as integer Random1
dim as integer Char,Pos2
dim as string TmpHash,TmpHash2
Random1=Len(Passwort)/16

Randomize Random1

For Position = 1 to Len(Passwort)
    Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
    TmpHash+=HEX(Char)
Next

Random1=LEN(TmpHash)
Randomize Random1

For Position = 1 to Len(TmpHash)
    Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
    TmpHash2+=CHR(Char)
Next

Passwort=""
Dim Size as integer
Size = Len(TmpHash2)

For Position=0 to Keylength
    Pos2=Int(RND*Size)-6
    Char=ASC(MID(TmpHash2,Pos2,1))
    Passwort+=Chr(Char)
Next

PasswortHash=Passwort
end function

' Programm
Dim As String H
H=Passworthash ("1234")
Print H
sleep


_________________
Bis irgendwann... grinsen


Zuletzt bearbeitet von AndT am 01.08.2007, 12:47, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 01.08.2007, 10:36    Titel: Antworten mit Zitat

Dir ist klar, das Pos2 negative Werte annehmen kann? Vielleicht liegt der Fehler dort.
_________________
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
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 10:39    Titel: Antworten mit Zitat

Ich vermute den Fehler in den beiden Zeilen
Code:

    Pos2=Int(RND*Size)-6
    Char=ASC(MID(TmpHash2,Pos2,1))


durch Int(RND*Size)-6 koennten zahlen <1 entstehen
und bei "mid(string,<1,len)" zu fehler (abstuerzen ohne vorwarnung lächeln) fuehren.

Edit: da war mal wieder jemand schneller durchgeknallt
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 11:01    Titel: Antworten mit Zitat

das hat alles nichts gebracht mit dem Kopf durch die Mauer wollen
Unerklärlich mit den Augen rollen
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 11:42    Titel: Antworten mit Zitat

Ich habs sogar schon mit
Code:
For Position=1 to Keylength-1
   
    Pos2=Int(Rnd*Size)+1
    If Pos2<1 Then Pos2=1
    TmpX=MID(TmpHash2,Pos2,1)
    Char=ASC(TmpX)
    Print Pos2,TmpX,Char
    Passwort+=Chr(Char)

Next
versucht.

Kompletter Debugcode:
Code:
Function PasswortHash(Passwort as String) as String
dim as integer Keylength = 1024
dim as integer Position
dim as integer Random1
dim as integer Pos2
dim as string TmpHash,TmpHash2,Tmpx
Dim as ubyte Char
Dim Size as integer
Random1=Len(Passwort)/16

Randomize Random1
Print "1"
Size=Len(Passwort)
For Position = 1 to Size
    Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
    TmpHash+=HEX(Char)
Next
Print "2"
Random1=LEN(TmpHash)
Randomize Random1
Size=Len(TmpHash)
Print "3"
For Position = 1 to Size
    Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
    TmpHash2+=CHR(Char)
Next
Print len(TmpHash2)

Print "4"
Passwort=""
Print "5"
Size = Len(TmpHash2)
Pos2=1
Char=0
For Position=1 to Keylength-1
    Print "a1"
    'Pos2=Int(Rnd*Size)+1
    Print "a2"
    If Pos2<1 Then Pos2=1
    Print "a3"
    TmpX=MID(TmpHash2,Pos2,1)
    Print "a4"
    Char=ASC(TmpX)
    Print "a5"
    Print "Details: "; Pos2,TmpX,Char,Position
    Passwort+=Chr(Char)

Next

PasswortHash=Passwort
end function

' Programm
Dim As String H
H=Passworthash ("1234")

Ziel ist es, das das Programm sich beendet, ohne aufzuhängen oder abzustürzen
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 12:07    Titel: Antworten mit Zitat

Also das Ding ist das merkwuerdigste das mir je untergekommen ist,
ich programmiere nun fast schon ein Jahr in FreeBASIC aber dieses Programm ist das erste das meinen Rechner komplett lahmlegen konnte und das bei einer eigentlich recht einfachen Stringmanipulation... das kann ich mir absolut nicht erklaeren, da ich keine weiteren Fehler entdecken konnte....

Der fehler tritt IMMER in der "For Position=1 to Keylength-1 " schleife auf
ich habe extra noch eine sicherheitsabfrage der Pos2 eingefuegt
Code:

If Pos2<1 Then Pos2=1
If Pos2>Size-1 Then Pos2=Size-1

und dann blieb ALLES haengen....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
nemored



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

BeitragVerfasst am: 01.08.2007, 12:12    Titel: Antworten mit Zitat

Lass dir mal kurz vor dem Absturz die Werte aller verwendeten Variablen (incl. LEN() usw.) ausgeben. Vielleicht hilft das weiter.
_________________
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
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 12:17    Titel: Antworten mit Zitat

Ich hab den schon den Starken verdacht eines Bugs der FBC happy
Mittlerweile hab ich sogar das schon im englischen Forum gepostet mal abwartem was die sagen.
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 01.08.2007, 12:22    Titel: Antworten mit Zitat

Wenn du wüsstest, wieviele Bugs ich schon in OMIKRON-BASIC zu finden geglaubt habe ...
Bis zu welcher Marke funktioniert denn das Programm ohne Absturz?
_________________
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
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 12:23    Titel: Antworten mit Zitat

das Programm laueft fehlerfrei durch wenn man
Passwort+=chr(Char) ausklammert... die werte sehen korrekt aus,
fuegt man es wieder ein stuerzt es ab...
kann mir jedoch nicht erklaeren wieso....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 12:26    Titel: Antworten mit Zitat

kann nicht genau erklaeren wieso, aber so gehts...

Code:

const Keylength = 1024


Function PasswortHash(Passwort as String) as String
Dim passwortx as String*Keylength
dim as integer Position
dim as integer Random1
dim as integer Pos2
dim as string TmpHash,TmpHash2,Tmpx
Dim as ubyte Char
Dim Size as integer
Random1=Len(Passwort)/16

Randomize Random1

Size=Len(Passwort)
For Position = 1 to Size
    Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
    TmpHash+=HEX(Char)
Next

Random1=LEN(TmpHash)
Randomize Timer
Size=Len(TmpHash)

For Position = 1 to Size
    Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
    TmpHash2+=CHR(Char)
Next
Print len(TmpHash2)


Passwort=""

Size = Len(TmpHash2)
If Size<1 Then Size=1
Pos2=1
Char=0
For Position=1 to Keylength
    Pos2=Int(Rnd*Size)+1
    If Pos2<1 Then Pos2=1
    If Pos2>Size Then Pos2=Size
    TmpX=MID(TmpHash2,Pos2,1)
    Char=ASC(TmpX)
    If Char=0 Then Char=1
    PasswortX+=Chr(Char)
Next

PasswortHash=PasswortX
end function

' Programm
Dim As String H
H=Passworthash ("1234")
?H
sleep

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 12:29    Titel: Antworten mit Zitat

Es heisst, wenn man unpräzise Dimmt, dann soll der Linker mehr Code erstellen als nötig ist und dass dann auchnoch Fehlerhaft happy

Lol^^
Warum kommt den jetzt bei jedem programmstart was anderes raus???
Ziel ist es jetzt, das das jedesmal der gleiche String rauskommt

//Edit
Ich hab mittlerweile schon den Titel geändert xD
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 01.08.2007, 12:50    Titel: Antworten mit Zitat

Wieso soll dasselbe rauskommen, wenn du RND verwendest?
_________________
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
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 12:52    Titel: Antworten mit Zitat

hatte ein Random versehentlich mit auf "Ranomize Timer" gesetzt grinsen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 12:58    Titel: Antworten mit Zitat

jo
jetzt passts

Thanks zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 13:13    Titel: Antworten mit Zitat

Du darfst das neue Passwort nicht in der Function uebergebene variable "Passwort" speichern... eine extravariable wie die zu debugzwecken TmpX reicht aus....

Code:

Function PasswortHash(byval Passwort as String) as String
dim as integer Keylength
dim as integer Position
dim as integer Random1
dim as integer Pos2
dim as string TmpHash,TmpHash2,Tmpx
Dim as ubyte Char
Dim Size as integer
Keylength=1024
Random1=Len(Passwort)/16

Randomize Random1

Size=Len(Passwort)
For Position = 1 to Size
    Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
    TmpHash+=HEX(Char)
Next

Random1=LEN(TmpHash)
Randomize Random1
Size=Len(TmpHash)

For Position = 1 to Size
    Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
    TmpHash2+=CHR(Char)
Next
Print len(TmpHash2)

TmpX=""

Size = Len(TmpHash2)
If Size<1 Then Size=1

For Position=1 to Keylength
    Pos2=Int(Rnd*Size)+1
    If Pos2<1 Then Pos2=1
    If Pos2>Size Then Pos2=Size
    Char=ASC(MID(TmpHash2,Pos2,1))
    If Char=0 Then Char=1
    TmpX+=Chr(Char)
Next

PasswortHash=TmpX
end function

' Programm
Dim As String H
H=Passworthash ("1234")
?H
sleep


der fehler lag also einfach darin das aus irgendeinem Grund die function nicht damit klar kommt, die uebergebene Variable ab einen bestimmten punkt zu aendern...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 13:22    Titel: Antworten mit Zitat

Nur zu komisch das das hier geht happy
Code:
Function LOL(LOLTEXT as String) as string
    dim as integer Size,Position
    Size=Len(LOLTEXT)
    FOR Position = 1 to Size
        LOLTEXT+="A"
    NEXT
    LOL=LOLTEXT
End Function

?LOL ("1234")
sleep

_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



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

BeitragVerfasst am: 01.08.2007, 13:27    Titel: Antworten mit Zitat

ich kann nur vermutungen anstellen, aber ich glaube das ein String als Fixedlength uebergeben wird... wenn man also den String ueber die ursprungslaenge hinausschreibt duerfte es in etwa so sein als wenn man ueber einen vorher festgelegten reservierten speicherbereich hinausschreibt... und wozu das fuehrt ist ja bekant grinsen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 13:31    Titel: Antworten mit Zitat

Villeicht sogar über das Programm hinaus und in Andere bereiche des Speichers, das den Absturtz auslösen könnte.

Also doch ein Bug?
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 01.08.2007, 15:11    Titel: Antworten mit Zitat

Aus dem Englischen Forum:
Mico hat Folgendes geschrieben:
In the third FOR-NEXT loop use Size instead of Keylength-1. Size is the length of the string you're parsing by means of MID(), and its is 8 in your example. Keylength-1 is 1023 and that's the reason for the error.

Lol die meinen echt das Keylength-1 der Fehler ist.
Bleibt nur die Frage wie die Daruf kommen xD
_________________
Bis irgendwann... grinsen
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 1, 2  Weiter
Seite 1 von 2

 
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