Ankündigung

Einklappen
Keine Ankündigung bisher.

RijndaelMemory mit php nachbauen

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

  • RijndaelMemory mit php nachbauen

    Ich habe folgende Aufgabenstellung:
    Ich habe eine ASP.Net-Webapplikation mit einem Login. Das Passwort wird bei der Registration mit RijndaelMemory verschlüsselt und in einer MSSQL Datenbank gespeichert. Der gespeicherte Hash hat eine Länge von 28bit.
    Es ist nun gewünscht, dass die Webapplikation mit php nachgebaut werden soll. Dabei soll es - wenn irgend möglich - möglich sein, sich mit dem gleichen Password anzumelden (d.h. die Datenbank soll so weit als möglich unverändert bleiben).

    Ich habe nun mit OpenSSL und mcrypt experimentiert, komme aber beim besten Willen nicht auf einen 28bit-Hash:
    Hier mein Code:
    PHP-Code:
    // Test 'OpenSSL'
    $key openssl_random_pseudo_bytes(32);
    $ivlen openssl_cipher_iv_length($cipher="AES-256-CBC");
    $iv openssl_random_pseudo_bytes($ivlen);
    $pw2 openssl_encrypt($_POST['password'].$result[0]["PasswordSalt"], $cipher$key0$iv);

    // Test 'mcrypt' (deprecated)
    $iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_CBC); // MCRYPT_RIJNDAEL_128 + 32byte-Key = AES-256
    $iv_m mcrypt_create_iv($iv_sizeMCRYPT_RAND);
    $pw3_cipher mcrypt_encrypt(MCRYPT_RIJNDAEL_128$key$_POST['password'].$result[0]["PasswordSalt"], MCRYPT_MODE_CBC$iv_m);
    $pw3 base64_encode($pw3_cipher); 
    Hiermit erhalte ich bei OpenSSL einen 64bit Hash und bei mcrypt einen Hash mit 44bit.

    Ich habe viel gegoogelt, konnte aber leider nicht sehr viel brauchbares über Rijndeal Memory herausfinden und bin auch sonst nicht sehr versiert in Sachen verschlüsselung.
    Kann mit hier jemand weiterhelfen?

    PS: mir ist bewusst, das mcrypt 'deprecated' ist. Ich wollte nur testen, was ich damit für eine Ausgabe erhalten, bzw. inwiefern sich die Ausgabe von mcrypt von OpenSSL unterscheidet.


  • #2
    . Das Passwort wird bei der Registration mit RijndaelMemory verschlüsselt und in einer MSSQL Datenbank gespeichert. Der gespeicherte Hash hat eine Länge von 28bit.
    https://msdn.microsoft.com/de-de/lib...vs.110%29.aspx
    Provides methods for protecting and unprotecting memory.
    Passwörter zu Verschlüsseln ist eh no go, dafür gibts es hashes.
    wenn Du dich um die Länge sorgst; nutze längere Texte, dann werde auch die verschküsselten Daten grösser.



    Kommentar


    • #3
      komme aber beim besten Willen nicht auf einen 28bit-Hash, geschweige denn auf einen identischen Hash:
      Du meinst sicherlich 28Byte das dann 224 Bit wären.
      dies ist leider bei PHP nicht implementiert, weshalb du nicht umhin kommst, die Passworte neu generieren zu lassen.

      Obwohl, MS schreibt auch
      160 and 224 bit are not supported
      Siehe http://php.net/manual/en/mcrypt.ciphers.php
      openssl supportet ciphers und Wikipedia

      Kommentar


      • #4
        Es gibt zumindest eine Implementierung die du mal ausprobieren kannst

        https://github.com/phpseclib/phpsecl...t/Rijndael.php

        Sobald das unverschlüsselte Passwort zur Verifikation vorliegt, kannst du den Hash ja neu berechnen und mit abspeichern, und so die Passwörter migrieren. Es muss sich dann aber jeder Benutzer wenigstens ein Mal angemeldet haben.
        You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

        Kommentar


        • #5
          Zitat von MrChangelog Beitrag anzeigen
          Ich habe viel gegoogelt, konnte aber leider nicht sehr viel brauchbares über Rijndeal Memory herausfinden[...]
          Das ist aber essentiell. Du musst die Blockgröße, Blockmodus, Schlüssellänge, Schlüssel, ggf. Initialisierungsvektor und ggf. Padding rausfinden. Ansonsten kannst du das gleich vergessen.
          Wenn du das hast, kannst du dich über die Eigenheiten der Openssl API in PHP ärgern.

          Kommentar


          • #6
            Korrektur: die Längen der Hashes sind natürlich jeweils in Bytes und nicht in Bit.

            Kommentar


            • #7
              Zitat von erc Beitrag anzeigen

              Das ist aber essentiell. Du musst die Blockgröße, Blockmodus, Schlüssellänge, Schlüssel, ggf. Initialisierungsvektor und ggf. Padding rausfinden. Ansonsten kannst du das gleich vergessen.
              Wenn du das hast, kannst du dich über die Eigenheiten der Openssl API in PHP ärgern.
              Zur Not mag man ja auch mal OpenSSL in der Konsole testen.

              Wobei ich immer noch nicht verstehe,
              - wieso man zum Passwort speichern einen Verschlüsselungsalogo nutzt
              - einen HASH erwartet
              - sich über die Länge wundert, welche in meinen Augen vom Klartext abhängig ist
              - bei zweimaliger Verschlüsselung den selben Verrschlüsseltenb erwartet

              Kommentar

              Lädt...
              X