dedlfix: Umstellung auf UTF8 gelungen?

Beitrag lesen

Hi!

Wie gesagt. Angeblich soll man ja mit AES_ENCRYPT den Typ VARBINARY or BLOB nehmen.

Ich habe mit dem phpMyAdmin und dem AES_ENCRYPT etwas experimentiert. Auf der Startseite ist als "connection collation" utf8_... gewählt, Zeichen werden also UTF8-kodiert, die Kollation spielt erstmal keine Rolle.

SELECT  
AES_ENCRYPT('föo','bar'),  
AES_ENCRYPT(CONVERT('föo' USING latin1),'bar')

Das ergibt unterschiedliche Werte. AES_ENCRYPT() arbeitet also byteorientiert. Unicode-Codepoint-orientiert zu arbeiten ergibt keinen richtigen Sinn, denn diese Codepoints sind abstrakte Zahlen, die keine konkreten, für den Rechner nutzbaren Werte darstellen. Sie müssten dazu in eine konkrete Form gebracht werden, wie beispielsweise UTF-16 oder UTF-8. In diese Form müssten dann aber alle anders kodierten Werte gebracht werden, um vergleichbare Ergebnisse zu erzielen, wenn man mit den Zeichen an sich und nicht ihrer konkreten, irgendwie kodierten Form arbeiten wollte.

Wie auch immer, die Bytewerte interessieren. Und wenn du bei anscheinend gleichen Rechenschritten unterschiedliche Ergebnisse bekommst, so liegt dir Vermutung nahe, dass du mit unterschiedlichen Kodierungen arbeitest.

Überprüfen könntest du das, indem du mal das SELECT wegkommentierst und stattdessen ein INSERT ausführst (mit gleichem Passwort aber mit anderem Benutzernamen, denn da wird sicher ein unique key draufliegen). Die Werte für beide Benutzer kannst du anschließend zum Beispiel im PMA vergleichen. Sie sollten übereinstimmen, was sie aber vermutlich nicht tun werden.

Als nächstes könntest du das AES_ENCRYPT() an beiden Stellen (beim normalen INSERT und beim testweisen) entfernen und mal Klartext-Passwörter speichern. Dann solltest du deutlicher sehen, was aus den Werten wird, wenn du dir das Ergebnis im PMA anschaust.

Auf alle Fälle solltest du VARBINARY als Feldtyp verwenden und eine ausreichende Feldgröße wählen. Die Doku zu AES_ENCRYPT spricht von
  16 × (trunc(string_length / 16) + 1)
wobei du beachten musst, dass 1 Zeichen UTF-8-kodiert bis zu 4 Byte lang werden kann.

Lo!

0 63

Umstellung auf UTF8 gelungen?

hawkmaster
  • datenbank
  1. 0
    hotti
    1. 0
      hawkmaster
      1. 0
        Tom
        1. 0
          hawkmaster
          1. 0
            Tom
            1. 0
              hawkmaster
              1. 0
                Tom
                1. 0
                  hawkmaster
                  1. 0
                    dedlfix
                    1. 0
                      hawkmaster
                      1. 0
                        dedlfix
                        1. 0
                          hawkmaster
                          1. 0
                            dedlfix
                            1. 0

                              Aus ü wird ü ??

                              hawkmaster
                              1. 0
                                dedlfix
                                1. 0
                                  hawkmaster
                                  1. 0
                                    dedlfix
                                    1. 0
                                      hawkmaster
                                      1. 0
                                        dedlfix
                                        1. 0

                                          vielleicht auch nur ein Bug?

                                          hawkmaster
                                          1. 0
                                            Sven Rautenberg
                                            1. 0
                                              hawkmaster
                                              1. 0
                                                Sven Rautenberg
                                          2. 0
                                            dedlfix
                                      2. 0
                                        Tom
                                        1. 0
                                          hawkmaster
                                          1. 0
                                            Tom
                                        2. 0
                                          Sven Rautenberg
                                    2. 0
                                      Tom
                                      1. 0
                                        dedlfix
                                    3. 0
                                      hawkmaster
                                      1. 0
                                        Tom
                                        1. 0

                                          UTF8 erkennen, mb_internal_encoding() ?

                                          hawkmaster
                                          1. 1

                                            Zugriff über den Index-Operator auf einen UTF-8-String?

                                            Tom
                                            1. 0
                                              Sven Rautenberg
                                              1. 0
                                                hawkmaster
                                                1. 2
                                                  Sven Rautenberg
                                                  1. 0
                                                    Christian Kruse
                                              2. 0
                                                Tom
                                      2. 0
                                        Sven Rautenberg
                            2. 0
                              Tom
                              1. 0
                                dedlfix
                                1. 0

                                  TOM und ТОМ

                                  Tom
                                  • menschelei
                              2. 0
                                Der Martin
                                1. 0
                                  at
                  2. 0
                    Tom
                    1. 0
                      hawkmaster
          2. 0
            hotti
  2. 0
    Harlequin
    1. 0
      hawkmaster
      1. 0
        Harlequin
    2. 0
      Tom
      1. 0
        Harlequin
        1. 0
          Tom
  3. 0
    Tom
    1. 0
      hawkmaster
      1. 0
        Tom
        1. 0
          hawkmaster
          1. 0
            Tom
  4. 0

    str_pad() multibyte?

    hawkmaster
    1. 0
      Tom
    2. 0
      Sven Rautenberg