Aktuelle Zeit: 15.12.2019 18:05

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Forumsregeln


Die Forumsregeln lesen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 10.10.2009 19:57 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
Hallo zusammen,

das ist das passendste Topic was ich hierzu gefunden habe, darum der Post hier an dieser Stelle.

Ich erstelle aus einem String einen MD5 Fingerprint, zum Beispiel aus "warum_nicht". Ich würde
jetzt erwarten, das unabhängig vom Betriebssystem die gleiche Rückgabe erfolgt. Bei XP und
Vista ist es auch so, zu Windows7 habe ich gerade noch eine Anfrage laufen die aber noch nicht
bestätigt ist.

Was aber sicher ist, unter z.B. WinME kommt ein anderer Code zurück. (Bitte, nicht gleich gähnen,
ja das OS ist alt, es haben aber doch noch einige ...)

Was auch sicher ist, es ist Wurst ob es sich dabei um eine virtuelle oder reale Maschine handelt.

Mich würde interessieren:

- was unter Win98 oder und 98SE herauskommt.
- ob das überhaupt sein darf, ich meine nämlich nicht, es sollte überall gleich sein.

Hier ein lauffähiges Testprogramm, zur "Sicherheit" noch einmal mit einem
älteren PB getestet, darum auch CreateGadgetList(wid), das einfach auskommentieren

Habe eben einmal in den "Analen" von PB gekramt und das Ganze mit 3.94
kompilieren lassen, siehe da: "Ei der Daus, da kommt das Rechte raus ..."

Das sollte vielleicht ins Bug-Forum, da ist was seit mindestens 4.00 verschleppt worden.

Gruß Jens

Code:
If OpenWindow(  0,  0,  0,280,120,"Passwort - Fingerprint",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) And CreateGadgetList(WindowID(0))
          TextGadget  (#PB_Any, 10, 10,130, 14,"Geben Sie ein Passwort ein:")
  strg0.l=StringGadget(#PB_Any,150,  8,120, 20,"")
          TextGadget  (#PB_Any, 10, 40,100, 14,"Rückgabestring MD5")
  strg1.l=StringGadget(#PB_Any, 10, 60,260, 20,"",#PB_String_ReadOnly)
  bt0.l  =ButtonGadget(#PB_Any, 10, 90,260, 24,"Ausführen")
  Quit.l=#False
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit=#True
      Case #PB_Event_Gadget
        Select EventGadget()
          Case bt0
            size.l=Len(GetGadgetText(strg0))
            If size
              *MemoryID = AllocateMemory(size); Länge des Strings
              If *MemoryID
                PokeS(*MemoryID, GetGadgetText(strg0))
                MD5$ = MD5Fingerprint(*MemoryID, MemorySize(*MemoryID))
                SetGadgetText(strg1,MD5$)
                FreeMemory(*MemoryID)
              EndIf
            EndIf
        EndSelect
    EndSelect
  Until Quit
EndIf
End

;<warum_nicht> ergibt bei WinME       : 45e928e853b3fa819ef7e72bd8260928

;<warum_nicht> ergibt bei XP und Vista: 953119d7f44682afb9a153db93ddbb4b

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Projekt / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 10.10.2009 20:28 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
unabhängig vom Thema, erzeugt du uner umständen ein IMA weil du nur ein Speicher erzeugst der die Länge vom String entspricht, unter UNICODE hätte der String dann aber doppelt so viele Bytes...
außerdem schreibt PokeS() noch eine NULL mit in den Speicher, die bei dir dann außerhalb des reservierten Speichers landet!

nimm also einerseits StringByteLength() statt Len() und mach den Speicher um SizeOf(Character) größer...
oder nehm gleich eine Variable und dann:
Code:
String$ = GetGadgetText(strg0)
MD5$ = MD5Fingerprint(@String$, StringByteLength(String$))


Vllt löst das ja auch schon das Problem

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 10.10.2009 21:46 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
@stargate,

danke, das hilft.

Aber richtig ist es trotzdem nicht.

Gruß Jens

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Projekt / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 10.10.2009 23:03 
Offline
PureBasic Team

Registriert: 29.08.2004 00:20
Wohnort: Stuttgart
AllocateMemory() rundet auf älteren Windows Versionen gerne mal etwas auf und gibt mehr Speicher zurück als man wollte. Wenn du dann MemorySize() verwendest dann berechnest du den MD5 Fingerprint von einem größeren Buffer als sonst. Nimm einfach die Länge des Strings und nicht MemorySize() dann klappt das auch.

Übrigens forderst du immernoch 1 byte zu wenig an für den String, weil PokeS() auch noch das abschließende Null-Byte schreibt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 11.10.2009 07:37 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
@freak,

vielen Dank für die ausführliche Begründung :) Das erklärt den Fehler.

@André sollte das entsprechend in der Hilfe vermerken, denn der obige
Code basiert auf dem Beispiel aus der Hilfe.

Wie von @stargate erwartet, funktioniert es auf den besagten Systemen so richtig:

Code:
If OpenWindow(  0,  0,  0,280,120,"Passwort - Fingerprint",#PB_Window_ScreenCentered|#PB_Window_SystemMenu))
          TextGadget  (#PB_Any, 10, 10,130, 14,"Geben Sie ein Passwort ein:")
  strg0.l=StringGadget(#PB_Any,150,  8,120, 20,"")
          TextGadget  (#PB_Any, 10, 40,100, 14,"Rückgabestring MD5")
  strg1.l=StringGadget(#PB_Any, 10, 60,260, 20,"",#PB_String_ReadOnly)
  bt0.l  =ButtonGadget(#PB_Any, 10, 90,260, 24,"Ausführen")
  Quit.l=#False
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit=#True
      Case #PB_Event_Gadget
        Select EventGadget()
          Case bt0
            size.l=Len(GetGadgetText(strg0))
            If size
              *MemoryID = AllocateMemory(size); Länge des Strings
              If *MemoryID
                String$ = GetGadgetText(strg0)
                MD5$ = MD5Fingerprint(@String$, StringByteLength(String$))
                SetGadgetText(strg1,MD5$)
                FreeMemory(*MemoryID)
              EndIf
            EndIf
        EndSelect
    EndSelect
  Until Quit
EndIf
End

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Projekt / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 11.10.2009 12:13 
Offline
Admin
Benutzeravatar

Registriert: 29.08.2004 11:27
Das mit dem PokeS hätte ich in den Zusammenhang auch nicht gedacht, das man dadurch Probleme mit Len in Memory
erhält. Vor allem das es bei den NT's korrekt läuft und unter Win9x anders ist. Wenn man es aber sagt, das ist so, dann soll es wohl so sein. Man lernt nie aus 8)

Ich hatte zuvor auch für Jens das ausprobiert und nachdem hier eine Lösung gepostet wurde, das so angepasst.


Code:
;Test this on Win9x and another OS Win2k and greather 
;
Code.s="MyCodeWord"
;size.l=Len(Code)
;*MemoryID = AllocateMemory(size)
;PokeS(*MemoryID,Code,33,-1)
;Debug MD5Fingerprint(*MemoryID, MemorySize(*MemoryID))
Debug MD5Fingerprint(@Code, StringByteLength(Code))

;Vorher mit auskommentierten Code probiert, was aber nicht unter OS-NT funktioniert!
;Virtual Windows 95       = eb43f2b9930d79d9f32d05dd8b034a72
;Virtual Windows 98       = eb43f2b9930d79d9f32d05dd8b034a72
;Virtual Windows Me       = eb43f2b9930d79d9f32d05dd8b034a72
;Virtual Windows NT       = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual Windows 2000 Pro.= 3fbcaefc1b93fbc153bc6a90ca85af08
;Vista UltimateX64        = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual Windows7 Ultimate= 3fbcaefc1b93fbc153bc6a90ca85af08



;Mit Stargate's Änderung wegen unverständlichen IMA (invalid memory access).
;Virtual Windows 95       = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual Windows 98       = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual Windows Me       = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual WinNT4 SP6       = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual Windows 2000 Pro.= 3fbcaefc1b93fbc153bc6a90ca85af08
;VistaUltimate X64        = 3fbcaefc1b93fbc153bc6a90ca85af08
;Virtual Windows7 Ultimate= 3fbcaefc1b93fbc153bc6a90ca85af08



Sorry, wegen dem "unverständlichen IMA". Sollte der Debugger das in PB das nicht auch anzeigen?

Gruß Falko

_________________
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 11.10.2009 13:09 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
Und mich würde in dem Zusammenhang durchaus interessieren, darum der Kommentar
"aber richtig ist es trotzdem nicht": Aus welchem kühlen Grund geht es bis 3.94 richtig,
dann aber plötzlich nicht mehr. Diese Tatsache relativiert die Aussage, das "ältere
Windows Versionen gerne mal etwas aufrunden" nämlich ganz gewaltig.

Gruß Jens

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Projekt / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 11.10.2009 13:27 
Offline
PureBasic Team

Registriert: 29.08.2004 00:20
Wohnort: Stuttgart
sharkpeter hat geschrieben:
Aus welchem kühlen Grund geht es bis 3.94 richtig,
dann aber plötzlich nicht mehr. Diese Tatsache relativiert die Aussage, das "ältere
Windows Versionen gerne mal etwas aufrunden" nämlich ganz gewaltig.


3.94 kennt den Befehl MemorySize() gar nicht, ich glaube also kaum das du den dort verwendet hast.

> Sorry, wegen dem "unverständlichen IMA". Sollte der Debugger das in PB das nicht auch anzeigen?

Wenn man 1 byte über einen Speicherbereich rausschreibt (hier das 0-Byte von PokeS) dann kommt es gerne mal zu Fehlern bei denen auch der Debugger nichts mehr machen kann: http://www.purebasic.fr/blog/?p=55


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 11.10.2009 13:58 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
@freak, richtig, dort habe ich die Länge direkt angegeben und den String auch.
Ohne das drum herum. Ich wollte einfach nur verstehen, was da schief läuft.

Also passiert offenbar bei MemorySize etwas unerwartetes. In der Regel
liegt die Länge eines Strings für eine derartige Passwortabfrage ja fest
und ist nicht variabel, unabhängig davon ob bei PokeS noch ein Leerbyte
geschrieben wird oder nicht. Somit ist es nur eine Frage des Handlings.

Nichts desto Trotz sollte die entsprechende Korrektur bitte bei André
landen, denn es ist zu erwarten, das irgendwann wieder jemand darüber
fällt, wenn er das Beispiel aus der Hilfe benutzt.

Gruß Jens

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Projekt / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MD5Fingerprint ergibt auf unterschiedlichen Systemen falsche
BeitragVerfasst: 13.10.2009 20:57 
Offline
PureBasic Team
Benutzeravatar

Registriert: 11.09.2004 16:35
Wohnort: Saxony / Deutscheinsiedel
Habe Thema auf die englische ToDo-Liste gesetzt, da ich mir für eine "selbst-kreierte" korrekte Beschreibung doch nicht sicher bin...

_________________
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye