romy: Hashwertberechnung - Sonderzeichen

Hi und guten Morgen,

ich habe eine Frage wie korrekterweise der Hashwert einer XML-Datei berechnet werden müsste (vielleicht gibt es ja eine SPEC oder so), wenn ein kodiertes Zeichen vorkommt, wie z.B. &.
Muss der Hashwertstring dann nur das & enthalten oder den gesamten Ausdruck. Der JavaSAXparser scheint automatisch das & zurückzugeben, auch wenn es als & kodiert ist.
Hat damit jemand Erfahrung, wie man das schön lösen kann? Es entstehen ja nun mal unterschiedliche Hashwerte, wenn einmal nur das & und einmal & mit einbezogen werden.

Vielen Dank und einen schönen Tag.

ciao
romy

  1. Hi,

    ich habe eine Frage wie korrekterweise der Hashwert einer XML-Datei berechnet werden müsste (vielleicht gibt es ja eine SPEC oder so), wenn ein kodiertes Zeichen vorkommt, wie z.B. &.

    der _Wert_, der im XML-Code steht, lautet dann mit "&". Deine Frage ist identisch mit diesem Fall:

    Wenn Du in einer Variable stehen hast:
    $foo = "bla "blub"";
    müssen die Anführungszeichen dann mit oder ohne Backslash verwendet werden?

    Muss der Hashwertstring dann nur das & enthalten oder den gesamten Ausdruck. Der JavaSAXparser scheint automatisch das & zurückzugeben, auch wenn es als & kodiert ist.

    Ja, selbstverständlich. Würde der Wert "&" enthalten, müsste dies im XML-Code als "&" erscheinen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      Muss der Hashwertstring dann nur das & enthalten oder den gesamten Ausdruck. Der JavaSAXparser scheint automatisch das & zurückzugeben, auch wenn es als & kodiert ist.
      Ja, selbstverständlich. Würde der Wert "&" enthalten, müsste dies im XML-Code als "&" erscheinen.

      Vielen Dank, so habe ich es mir gedacht, aber war mir nicht sicher.

      ciao
      romy

      1. Hallöchen,

        Muss der Hashwertstring dann nur das & enthalten oder den gesamten Ausdruck. Der JavaSAXparser scheint automatisch das & zurückzugeben, auch wenn es als & kodiert ist.
        Ja, selbstverständlich. Würde der Wert "&" enthalten, müsste dies im XML-Code als "&" erscheinen.

        Ich bin ja eigentlich bei dir, aber:

        Einen Hashwert berechnet man ja über einen Textstring, indem wird ja nun das & als & dargestellt, sollten nicht die Bytes gehashed werden? Ich frage weiter, weil ich es nicht beweisen kann, ich kann keinerlei Doku dazu finden. Es gibt zwar unzählige Dokumente zur Kanonisierung von XML-Dokumenten, aber wie der Hash entsprechend berechnet werden muss steht nirgendwo.

        ciao
        romy

        1. Hi,

          Einen Hashwert berechnet man ja über einen Textstring, indem wird ja nun das & als & dargestellt,

          nein, das ist der XML-String. Der Textstring enthält nur das "&".

          sollten nicht die Bytes gehashed werden?

          Ja, wenn Du den XML-Code an sich einem Hash-Mechanismus überführst.

          Ich frage weiter, weil ich es nicht beweisen kann, ich kann keinerlei Doku dazu finden.

          Zu was genau suchst Du denn die Doku? Ich erzähle Dir hier eigentlich nur, was ein sinnvolles Vorgehen ist. Mir ist aber nicht klar, was eigentlich Dein Ziel bzw. Dein Problem dabei ist.

          Es gibt zwar unzählige Dokumente zur Kanonisierung von XML-Dokumenten, aber wie der Hash entsprechend berechnet werden muss steht nirgendwo.

          Gibt es denn Systeme, die ein XML-Dokument kanonisieren _und_ einen Hash dazu berechnen bzw. erwarten? Wozu dient der Hash letztlich?

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Hi Cheatah,

            Einen Hashwert berechnet man ja über einen Textstring, indem wird ja nun das & als & dargestellt,
            nein, das ist der XML-String. Der Textstring enthält nur das "&".

            Das verstehe ich nicht, der Textstring (im Editor) enthält doch das & *verwirrt sei*

            sollten nicht die Bytes gehashed werden?
            Ja, wenn Du den XML-Code an sich einem Hash-Mechanismus überführst.

            ??? wie oben, ich versteh es noch nicht so ganz. Letztendlich ist ein XML-Dokument doch auch nur eine Folge von Bytes, die Bytefolge enthält in diesem Beispiel aber & -> Die XML-Datei an sich enthält als Wert tatsächlich &. Du beschreibst es aber genau anders herum...

            Ich frage weiter, weil ich es nicht beweisen kann, ich kann keinerlei Doku dazu finden.
            Zu was genau suchst Du denn die Doku? Ich erzähle Dir hier eigentlich nur, was ein sinnvolles Vorgehen ist. Mir ist aber nicht klar, was eigentlich Dein Ziel bzw. Dein Problem dabei ist.

            Wir haben eine XML-Schnittstelle. Die wird auf der einen Seite erzeugt und auf der anderen Seite geprüft mittels eines Hashwertes über das Dokument. Das XML-Dokument ist kanonisiert, d.h. die Sonderzeichen sind kodiert. Die erstellende Seite hashed & und die Prüfende nur &. Jetzt ist die Frage, gibt es dazu eine Doku oder Ähnliches über das Verfahren an sich, was richtig ist. Muss man sich einfach einigen, was ist sinnvoller?

            Vielen Dank!

            ciao
            romy

            1. echo $begrüßung;

              Einen Hashwert berechnet man ja über einen Textstring, indem wird ja nun das & als & dargestellt,
              nein, das ist der XML-String. Der Textstring enthält nur das "&".
              Das verstehe ich nicht, der Textstring (im Editor) enthält doch das & *verwirrt sei*

              Cheatah meint sicher, dass der Hash-Wert rein über die via XML zu transportierenden Daten gebildet werden soll, dann hast du ein &. Wenn der Hashwert aber über den XML-Quelltext gebildet werden soll, dann muss das &amp; genommen werden, genauso wie die <> zur Elementbegrenzung und auch die Elementnamen und ebenfalls die Attribute inklusive Werte und Begrenzungszeichen mitgenommen werden wüssen. Dann gibt es aber möglicherweise ein Problem mit dem Whitespace, der zur Formatierung zwischen Elementen (und Attributen) eingefügt ist, ansonsten aber keine Information überträgt. Unterschiedlicher Whitespace ändert an den den Daten nichts, wohl aber am Hash-Wert, wenn er mitgehasht wird.

              Wir haben eine XML-Schnittstelle. Die wird auf der einen Seite erzeugt und auf der anderen Seite geprüft mittels eines Hashwertes über das Dokument. Das XML-Dokument ist kanonisiert, d.h. die Sonderzeichen sind kodiert. Die erstellende Seite hashed &amp; und die Prüfende nur &. Jetzt ist die Frage, gibt es dazu eine Doku oder Ähnliches über das Verfahren an sich, was richtig ist. Muss man sich einfach einigen, was ist sinnvoller?

              Ich denke, hier kommt es auf die gegenseitige Vereinbarung an. Ihr könnt euch auf das relativ unaufwendige Hashen des XML-Quelltextes (unter Auslassung der zur Formatierung verwendeten Whitespacezeichen) einigen, oder ihr bildet Hash-Wete über die Daten und müsst dabei auch irgendwie die Element- und Attributnamen mit berücksichtigen (ganz zu schweigen von Namensräumen, Verarbeitungsanweisungen <?... und Kommentaren).

              echo "$verabschiedung $name";

            2. Hallo romy,

              Wir haben eine XML-Schnittstelle. Die wird auf der einen Seite erzeugt und auf der anderen Seite geprüft mittels eines Hashwertes über das Dokument. Das XML-Dokument ist kanonisiert, d.h. die Sonderzeichen sind kodiert. Die erstellende Seite hashed &amp; und die Prüfende nur &. Jetzt ist die Frage, gibt es dazu eine Doku oder Ähnliches über das Verfahren an sich, was richtig ist. Muss man sich einfach einigen, was ist sinnvoller?

              Unter: http://www.w3.org/TR/xmldsig-core/#sec-c14nAlg steht dazu ein wenig. Mir scheint die Frage zu sein, welchen Algorithmus die beiden Seiten verwenden.

              Grüße
              Thomas

            3. Hi,

              nein, das ist der XML-String. Der Textstring enthält nur das "&".
              Das verstehe ich nicht, der Textstring (im Editor) enthält doch das &amp; *verwirrt sei*

              das ist der XML-String. Der Textstring ist das, was Du mit XML-kompatiblen Methoden aus dem XML-Dokument herausziehst - und das damit dekodiert ist.

              Ja, wenn Du den XML-Code an sich einem Hash-Mechanismus überführst.
              ??? wie oben, ich versteh es noch nicht so ganz. Letztendlich ist ein XML-Dokument doch auch nur eine Folge von Bytes,

              Genau wie ein (z.B.) PHP-Script. Dennoch wirst Du dort sicher nicht in die Versuchung geraten, eine Zeile wie

              $foo = "bla "blub"";

              zu verfassen, obwohl 'bla "blub"' und nicht 'bla "blub"' der Text ist, den Du meinst. Bei XML ist es nicht anders: Text ist "&", XML ist "&amp;".

              die Bytefolge enthält in diesem Beispiel aber &amp; -> Die XML-Datei an sich enthält als Wert tatsächlich &. Du beschreibst es aber genau anders herum...

              Das liegt glaube ich daran, dass wir "Text" unterschiedlich meinen. Für Dich ist es offenbar das, was Du im Text-Editor öffnest, also die XML-Datei; diese ist für mich XML. Text ist das, was mit XML-kompatiblen Methoden in dieses Dokument hineingebracht und aus ihm herausgelesen wird - also etwas, das (eventuell) nicht die Spur von XML enthält, auch kein "&amp;".

              Wir haben eine XML-Schnittstelle. Die wird auf der einen Seite erzeugt und auf der anderen Seite geprüft mittels eines Hashwertes über das Dokument. Das XML-Dokument ist kanonisiert, d.h. die Sonderzeichen sind kodiert. Die erstellende Seite hashed &amp; und die Prüfende nur &. Jetzt ist die Frage, gibt es dazu eine Doku oder Ähnliches über das Verfahren an sich, was richtig ist. Muss man sich einfach einigen, was ist sinnvoller?

              Ja, man muss sich einigen. Die Frage ist dabei, ob Du das XML-Dokument an sich überprüfen möchtest, oder nur seine (bzw. einen Teil seiner) Inhalte? Im letztgenannten Fall *muss* (IMHO) eine Dekodierung durchgeführt werden, da es sonst nicht um Inhalte geht, sondern allenfalls um Ausschnitte - nach dem Motto: "Mir nähme amol de Zeil siebazähn", egal was nun drin steht. Dann müssten, wie dedlfix schon sagt, auch XML-Tags, SGML-Kommentare, alle Whitespaces et cetera mit in den Hash-Algorithmus einfließen.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hallo,

                Das liegt glaube ich daran, dass wir "Text" unterschiedlich meinen. Für Dich ist es offenbar das, was Du im Text-Editor öffnest, also die XML-Datei; diese ist für mich XML. Text ist das, was mit XML-kompatiblen Methoden in dieses Dokument hineingebracht und aus ihm herausgelesen wird - also etwas, das (eventuell) nicht die Spur von XML enthält, auch kein "&amp;".

                da würde ich mit der Interpretation des Wortes "Text" aber auch eher zu Romys Ansicht tendieren. "Text" ist für mich in diesem Zusammenhang nichts Gegenständliches, kein Daten- oder Dateiformat, sondern eine Sichtweise, eine Betrachtungsvariante eines beliebigen Datenstroms. Wenn ich also beispielsweise ein HTML-Dokument "als Text öffne", dann verstehe ich darunter, den HTML-Quellcode so wie er ist als uninterpretierte Zeichenfolge in einem Texteditor zu betrachten. Also gerade mal eine Abstraktionsebene höher, als den Datenwust mit einem Hex-Editor zu betrachten.
                Was du mit "Text" bezeichnest, verstehe ich dann eher unter dem Begriff Nutzdaten oder Nutzinhalt.

                Die Frage ist dabei, ob Du das XML-Dokument an sich überprüfen möchtest, oder nur seine (bzw. einen Teil seiner) Inhalte?

                Falls die Überprüfung nur der Sicherstellung der Datenintegrität dient (etwa um Übermittlungsfehler oder Manipulationen zu erkennen), ist das eigentlich egal. Es muss nur auf beiden Seiten dasselbe Verfahren verwendet werden.

                Dann müssten, wie dedlfix schon sagt, auch XML-Tags, SGML-Kommentare, alle Whitespaces et cetera mit in den Hash-Algorithmus einfließen.

                Das wäre für mich intuitiv selbstverständlich.

                So long,
                 Martin

                --
                Kleine Geschenke erhalten die Freundschaft.
                Große verderben sie aber meist auch nicht.