Ankündigung

Einklappen
Keine Ankündigung bisher.

WHERE verschlüsseltes, deutsches Datumformat

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • WHERE verschlüsseltes, deutsches Datumformat

    Hallo,

    meine Kenntnisse reichen leider lange nicht aus, um folgendes Problem zu lösen: Die Abfrage soll auf Ergebnisse beschränkt werden, bei denen ein verschlüsseltes Datum im Format 31.12.2015 nicht in der Vergangenheit liegt.

    Folgende entschlüsselung funktioniert:

    SELECT
    ...
    FROM `XY`
    WHERE
    (CAST(AES_DECRYPT(FROM_BASE64(id), SHA2('$aes_key', 256)) as CHAR) = '$id'
    SQL;

    Nun soll aber nicht nach einer z.B. ID gesucht werden, sondern dem Datum, also zur Verdeutlichung: "SELECT ... FROM .. WHERE 'DECRYPT...' > 02.11.2015. Geht da mit DATE_FORMAT etwas, aber wie?


  • #2
    Aus welchem Grund liegt das Datum verschlüsselt und in deutschem Format in der Datenbank und nicht als DATETIME?

    Kommentar


    • #3
      Warum sollte es nicht gehen? Das Resultat von decrypt passend casten und vergleichen. Falls die DB funktionale Indexe kennt könnte man das sogar indexbasiert hinbekommen.

      Kommentar


      • #4
        Zitat von akretschmer Beitrag anzeigen
        Falls die DB funktionale Indexe kennt könnte man das sogar indexbasiert hinbekommen.
        Interessensfrage: Wenn man einen Index mit den entschlüsselten Wert anlegt, dann liegen die Werte ja erst wieder entschlüsselt am Server vor, oder?

        Kommentar


        • #5
          @tkausl: Pauschal alle Daten sind verschlüsselt. DATETIME wäre sinnvoll, die Bestandsdaten sind es aber leider nicht.

          @akretschmer: Ein '02.10.2015' mit > vergleichen? Wie bitte das?

          Kommentar


          • #6
            Du konvertierst den entschlüsselten Wert mit STR_TO_DATE in ein gültiges Datum und vergleichst dann. Ich würde aber mal das allgemeine Vorgehen in Frage stellen. Die verschlüßelt Daten sind für die Datenbank unzugänglich, damit kann auch nicht damit gefiltert werden. Natürlich können die Daten on the fly entschlüsselt werden, aber das skaliert nicht. Da würde ich mir ein anderen Ansatz suchen...

            Kommentar


            • #7
              Zitat von Joy Beitrag anzeigen
              @akretschmer: Ein '02.10.2015' mit > vergleichen? Wie bitte das?

              Code:
              test=*# select to_date('02.10.2015','dd.mm.yyyy') > current_date;
               ?column?
              ----------
               f
              (1 row)
              
              test=*# select to_date('02.10.2015','dd.mm.yyyy') < current_date;
               ?column?
              ----------
               t
              (1 row)

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                Interessensfrage: Wenn man einen Index mit den entschlüsselten Wert anlegt, dann liegen die Werte ja erst wieder entschlüsselt am Server vor, oder?
                Auch wenn der Index nicht alle Informationen enthalten sollte oder komplett rekonstruierbar ist, liegt trotzdem noch der Schlüssel in unverschlüsselter Form daneben. Das ist vom Aspekt der Sicherheit also vollkommen bullshit.

                Kommentar


                • #9
                  Zitat von erc Beitrag anzeigen

                  Auch wenn der Index nicht alle Informationen enthalten sollte oder komplett rekonstruierbar ist, liegt trotzdem noch der Schlüssel in unverschlüsselter Form daneben. Das ist vom Aspekt der Sicherheit also vollkommen bullshit.
                  Allerdings richtig.

                  Kommentar


                  • #10
                    wenn das geht:
                    Zitat von Joy Beitrag anzeigen
                    SELECT
                    ...
                    FROM `XY`
                    WHERE
                    (CAST(AES_DECRYPT(FROM_BASE64(id), SHA2('$aes_key', 256)) as CHAR) = '$id'
                    SQL;
                    Warum dann nicht eine Datumsumwandlung drumrum packen, wie akretschmer vorgeschlagen hat?

                    STR_TO_DATE(mydecryptdataexpresseion, '%d.%m.%Y')


                    also z.B.
                    Code:
                    SELECT
                    ...
                    FROM `XY`
                    WHERE
                    STR_TO_DATE(CAST(AES_DECRYPT(FROM_BASE64(id), SHA2('$aes_key', 256)) as CHAR, , '%d.%m.%Y') > STR_TO_DATE('$id','%d.%m.%Y')
                    @Security
                    Es ist ja gar nicht bekannt, welchen Zweck die Verschlüsselung hat. Außerdem ist es ein immanentes Problem, das nichts mit der Frage zu tun hat oder?

                    Kommentar

                    Lädt...
                    X